2017-08-15 45 views
0

我想用PHP卷曲空的结果与PHP卷曲,但响应是JSON格式

https://www.tiket.com/ajax/pingFlightSearch?d=CGK&a=DPS&date=2017-08-18&adult=1&child=0&infant=0&airlines=%5B%22LION%22%5D&subsidy=true&page_view=roundseperate

撷取此网址数据的存在,但我得到了一个空白页面。

我检查该链接,并用mozilla network-> xhr进行检查,并在响应选项卡中有一个内容。

我怎样才能从该链接提取数据与PHP卷曲?

这里是我的代码

$url = 'https://www.tiket.com/ajax/pingFlightSearch?d=CGK&a=DPS&date=2017-08-18&adult=1&child=0&infant=0&airlines=%5B%22LION%22%5D&subsidy=true&page_view=roundseperate'; 

$cURL = curl_init(); 

curl_setopt($cURL, CURLOPT_URL, $url); 
curl_setopt($cURL, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17'); 
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($cURL, CURLOPT_AUTOREFERER, true); 
curl_setopt($cURL, CURLINFO_HEADER_OUT, true); 
curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($cURL, CURLOPT_VERBOSE,true); 
curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    "Host" => "www.tiket.com", 
    "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0", 
    "Accept" => "application/json, text/javascript, */*; q=0.01", 
    "Accept-Language" => "en-us,en;q=0.5", 
    "Accept-Encoding" => "gzip, deflate, br",  
    "Content-Type" => "application/cap+xml;charset=utf-8", 
    "X-NewRelic-ID" => "UQIGUlJXGwACUFZaAAM=", 
    "X-Requested-With" => "XMLHttpRequest",   
    "Connection" => "keep-alive", 
    "Pragma" => "no-cache", 
    "Cache-Control" => "no-cache" 
)); 

$result = curl_exec($cURL); 

print_r($result); 

curl_close($cURL); 

我必须加上“X-要求 - 由于:XMLHttpRequest的”该链接则回应会出来的头。

edit header

则响应会出来 [响应结果] [2]

+2

该页面还返回空对我的回应 - 你确定它不需要设置cookie吗?路径开始处的'/ ajax /'表明它可能需要一个会话已经存在。 – iainn

+0

没有任何反应.. –

+0

我忘了这一个。在该链接的头部添加'X-Requested-With:XMLHttpRequest',那么感谢兄弟会回应 –

回答

1

你已经做了CURLOPT_HTTPHEADER一个错误。您将params设置为Key => Value,但它不正确。您应该将params设置为以“:”作为分隔符的值。

curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    "Host: www.tiket.com", 
    "Accept: application/json, text/javascript, */*; q=0.01", 
    "Accept-Language: en-us,en;q=0.5", 
    "Content-Type: application/cap+xml;charset=utf-8", 
    "X-NewRelic-ID: UQIGUlJXGwACUFZaAAM=", 
    "X-Requested-With: XMLHttpRequest",   
    "Connection: keep-alive", 
    "Pragma: no-cache", 
    "Cache-Control: no-cache" 
)); 

而且我已删除此字符串来获得非压缩数据

"Accept-Encoding: gzip, deflate, br", 
+0

。它救了我。 –

+0

,下次检查curl_setopt的返回值!如果你这样做了,它会告诉你setopt失败了,如果进一步使用了curl_error()来提取错误,它会告诉你格式是无效的。使用类似'function ecurl_setopt($ ch,int $ option,$ value){ $ ret = curl_setopt($ ch,$ option,$ value); (curl_errno($ ch))。'。curl_error:'.curl_error($ ch));如果($ ret!== true)抛出new RuntimeException('curl_setopt()failed。curl_errno:'。return_var_dump(curl_errno($ ch) } }' – hanshenrik

0

伴侣是U确保这个链接的工作?因为我用mozilla和chrome检查了代码,并且响应是空的,我试图用一个简单的php类来刮擦我已经卷曲并且结果是空的cuz链接没有响应