Php 旋度400作为回应

Php 旋度400作为回应,php,xml,http,curl,Php,Xml,Http,Curl,欢迎任何愿意帮忙的人。。我不知道还能做什么。我试图向api发送一个xml请求,api将返回一个xml格式的响应。我正在使用curl来实现它。但无论我以何种方式提出请求,我总是得到400个响应。url的格式正确。这是我的密码: $ch1 = curl_init(); $fp1 = fopen('poi.xml','w'); curl_setopt($ch1, CURLOPT_URL, "http://api.ean.com/ean-services/rs/hotel/v3/ge

欢迎任何愿意帮忙的人。。我不知道还能做什么。我试图向api发送一个xml请求,api将返回一个xml格式的响应。我正在使用curl来实现它。但无论我以何种方式提出请求,我总是得到400个响应。url的格式正确。这是我的密码:

$ch1 = curl_init(); 
    $fp1 = fopen('poi.xml','w'); 
    curl_setopt($ch1, CURLOPT_URL, "http://api.ean.com/ean-services/rs/hotel/v3/geoSearch?cid=55505&minorRev=14&apiKey=xkr94zxbsjnzczryqajmjg3g&locale=en_US&currencyCode=USD&customerIpAddress=189.214.86.135&customerUserAgent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31&xml=<LocationInfoRequest><destinationString>Dallas, TX</destinationString><type>2</type></LocationInfoRequest>");  
    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);
    curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch1, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'); 
    $val1 = curl_exec($ch1);
    $info = curl_getinfo($ch1);
    echo '<pre>';
      print_r($info);
      echo '</pre>';
    curl_close($ch1);//Close curl session 
    fclose($fp1); //Close file overwrite 
    $avail = simplexml_load_file('poi.xml');

我做错了什么?任何帮助都将不胜感激。

请注意您联系的URL中的XML代码

你确定应该在那里吗


如果是,您可能需要对其进行正确的URL编码。代码400表示您试图访问的URL不存在。由于返回的url与您发送的url不匹配,这将表明是正确的。

您面临的问题与curl关系不大,而与您正在使用的url关系更大:

http://api.ean.com/ean-services/rs/hotel/v3/geoSearch?cid=55505&minorRev=14&apiKey=xkr94zxbsjnzczryqajmjg3g&locale=en_US¤cyCode=USD&customerIpAddress=189.214.86.135&customerUserAgent=Mozilla/5.0 (Windows NT 6.1;WOW64)AppleWebKit/537.31(KHTML,像Gecko)Chrome/26.0.1410.43 Safari/537.31&xml=Dallas,TX2

URL无效,它包含特殊字符,例如空格字符

您需要正确地构建它,PHP可以通过使用一些变量和URL查询参数数组来帮助您,该函数可以为您正确地编码所有内容:

$ch1 = curl_init();
...
curl_setopt($ch1, $url);  

# or just:

$ch1 = curl_init($url);

这将解决您在请求URL中遇到的问题。请求中可能还有更多问题/其他错误。使用curl时,您可能会发现中概述的信息。

我对curl不太熟悉,但是从我使用命令
curl-O的经验来看http://url_to_your_api_call
应该可以,这将得到xml,然后你可以选择如何处理,谢谢你的回答,但我不明白我应该把它放在哪里。你能从我的代码中理解一下吗?ThanksI可以试着首先提供帮助您是否尝试过在调用脚本的同一工作目录中查看poi.xml?正如curl告诉您的,400响应是http代码,这意味着您有一个错误的请求(未正确格式化),这种格式化是特定于您的api的(我不知道的事情),还有更多:可能的重复;可能的副本;代码较少的可能替代方法:
// create api.ean.com request URL:
$url = 'http://api.ean.com/ean-services/rs/hotel/v3/geoSearch?' . http_build_query(array(
    'cid'               => '55505',
    'minorRev'          => '14',
    'apiKey'            => 'xkr94zxbsjnzczryqajmjg3g',
    'locale'            => 'en_US',
    'currencyCode'      => 'USD',
    'customerIpAddress' => '189.214.86.135',
    'customerUserAgent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31',
    'xml'               => '<LocationInfoRequest><destinationString>Dallas, TX</destinationString><type>2</type></LocationInfoRequest>',
));
$ch1 = curl_init();
...
curl_setopt($ch1, $url);  

# or just:

$ch1 = curl_init($url);