使用CURL获取数据时出现问题

4

我正在使用CURL发送API请求,但无法获取请求。当您直接在浏览器中调用API时,它可以正常工作。

这是链接

http://api.ean.com/ean-services/rs/hotel/v3/info?cid=55505&minorRev=99&apiKey=5d9cp7nfxruc7p788fvvqpwn&locale=en_US&currencyCode=USD&hotelId=123912

这是我的 CURL 代码:

  $post_string1 = "cid=55505&minorRev=99&apiKey=5d9cp7nfxruc7p788fvvqpwn&locale=en_US&currencyCode=USD&type=xml&hotelId=123912";  

  $path1 = "http://api.ean.com/ean-services/rs/hotel/v3/info"; //Relative path to the file with $_POST parsing

$ch1 = curl_init($path1); 
$fp1 = fopen('hotel.xml','w');
curl_setopt($ch1, CURLOPT_POSTFIELDS, $post_string1); //Send the data to the file
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_HTTPHEADER, array('Accept: application/xml')); 
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch1, CURLOPT_FILE, $fp1);
$val = curl_exec($ch1);
$info = curl_getinfo($ch1);
curl_close($ch1);//Close curl session
fclose($fp1); //Close file overwrite

//$hotel = simplexml_load_file('hotel.xml');

echo '<pre>';print_r($info); 

我收到了http 405错误代码。请指导我做错了什么。

403禁止访问:您的凭据无效。就是这么简单。 - STT LCU
$post_string1中删除URL,它只应包含POST参数。 $post_string1 = 'cid=55505&minorRev=99&apiKey=5d9cp7nfxruc7p788fvvqpwn&locale=en_US&currencyCode=USD&type=xml&hotelId=123912'; - Fracsi
2
405方法不允许:当服务器期望GET(或反之)时,您不能使用POST。 - STT LCU
1
是的,但我们想知道为什么Shazad的代码不起作用而你的可以。我们不仅仅寻找代码,还要寻找知识! - STT LCU
@STTLCU,看起来不允许使用POST方法。 - M Shahzad Khan
显示剩余2条评论
1个回答

6

请检查这个

$post_string1 = "http://api.ean.com/ean-services/rs/hotel/v3/info?cid=55505&minorRev=99&apiKey=5d9cp7nfxruc7p788fvvqpwn&locale=en_US&currencyCode=USD&type=xml&hotelId=123912";  
$header[] = "Accept: application/json";
  $header[] = "Accept-Encoding: gzip";
  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
  curl_setopt($ch,CURLOPT_ENCODING , "gzip");
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
  curl_setopt( $ch, CURLOPT_URL, $post_string1 );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  $response = json_decode(curl_exec($ch));
  print_r($response);  exit;

谢谢srivi。我认为这个API不允许使用POST方法。我可以在循环中使用这段代码来获取多个酒店的数据吗? - M Shahzad Khan
如果您需要多个酒店结果,请使用http://api.ean.com/ean-services/rs/hotel/v3/list?minorRev=14。请阅读此文档http://developer.ean.com/。其中包含您所需的所有内容和示例。 - Padmanathan J
我所说的多次请求是指,在foreach或for循环中使用不同的酒店ID进行请求。这样做可行吗? - M Shahzad Khan
@M Shahzad Khan 当然可以。 - Padmanathan J
@NathanSrivi,你不应该过度追求积分。在24小时内就接受答案是一种不好的做法。 - STT LCU

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接