API具有重定向页面-PHP

API具有重定向页面-PHP,php,api,Php,Api,我需要使用PHP将数据发送到API。API在显示最终结果之前有一个重定向页面。下面的代码显示重定向页面的内容,而不是最终结果。我怎样才能等到最后的结果呢 $url = 'https://example.com/api'; $data = array('text' => "try"); $options = array( 'http' => array( 'header' => "Content-type: application/x-www-form-urle

我需要使用PHP将数据发送到API。API在显示最终结果之前有一个重定向页面。下面的代码显示重定向页面的内容,而不是最终结果。我怎样才能等到最后的结果呢

$url = 'https://example.com/api';
$data = array('text' => "try");

$options = array(
   'http' => array(
    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
    'method'  => 'GET',
    'content' => http_build_query($data)
    )
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }

echo $result;
另外,我从stackoverflow的一个问题中得到了这个代码。

您可以使用
CURLOPT\u FOLLOWLOCATION
获得最终的回答:

发件人:

CURLOPT_FOLLOWLOCATION:TRUE以跟随服务器作为HTTP头的一部分发送的任何“位置:”头(注意,这是递归的,除非设置了CURLOPT_MAXREDIRS,否则PHP将跟随它发送的尽可能多的“位置:”头)

您可以使用
CURLOPT\u FOLLOWLOCATION
获取最终响应:

发件人:

CURLOPT_FOLLOWLOCATION:TRUE以跟随服务器作为HTTP头的一部分发送的任何“位置:”头(注意,这是递归的,除非设置了CURLOPT_MAXREDIRS,否则PHP将跟随它发送的尽可能多的“位置:”头)


你说的“重定向”到底是什么意思?页面是否返回3xx HTTP状态码?@Martineralecký我的意思是,当我使用浏览器访问API url(例如)时,它首先显示一个重定向页面(例如,等待过程完成…),然后显示最终结果,即文件。我的代码显示了第一页的html源代码。可能是javascript被用来重定向浏览器,而不是实际的http重定向。如果是javascript,也许你可以读取较新的目的地,然后更新API调用,直接转到最终目的地?@GreensterRox最终目的地的URL与第一个相同……你所说的“重定向”到底是什么意思?页面是否返回3xx HTTP状态码?@Martineralecký我的意思是,当我使用浏览器访问API url(例如)时,它首先显示一个重定向页面(例如,等待过程完成…),然后显示最终结果,即文件。我的代码显示了第一页的html源代码。可能是javascript被用来重定向浏览器,而不是实际的http重定向。如果是javascript,也许你可以读取较新的目的地,然后更新API调用,直接转到最终目的地?@GreensterRox最终目的地的URL与第一个目的地的URL相同…我尝试了此代码,但我再次获得了重定向页面的HTML代码。也许重定向是在javascript中完成的。重定向页面的HTTP代码和标题是什么?是。我查过了。重定向正在使用JavaScript。因此,您不能一次性使用PHP完成此操作。。。您必须获取第一个页面,解析并检测URL,然后发出新请求。因为PHP不会解释JavaScript。。这是API的网页。HTTP代码是200。我尝试了这个代码,但是我再次得到了重定向页面的HTML代码。也许重定向是用JavaScript完成的。重定向页面的HTTP代码和标题是什么?是。我查过了。重定向正在使用JavaScript。因此,您不能一次性使用PHP完成此操作。。。您必须获取第一个页面,解析并检测URL,然后发出新请求。因为PHP不会解释JavaScript。。这是API的网页。HTTP代码是200。
$url = 'https://example.com/api';
$data = array('text' => "try");

$full_url = $url . (strpos($url, '?') === FALSE ? '?' : '') 
            . http_build_query($data) ;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $full_url) ;
curl_setopt($ch, CURLOPT_HTTPHEADER, [
     'Content-type: application/x-www-form-urlencoded',
]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close ($ch);

var_dump($response) ;