2013-03-16 51 views
0

当通过url获取json数据时,出现问题。当url路径包含空格时,urlencode不起作用

的URL为http://farmapi.fastway.org/v3/psc/lookup/MEL/Point%20cook/3030?LengthInCm=30&WidthInCm=30&HeightInCm=30&WeightInKg=4&api_key=MY_API_KEY

我试着用用urlencode编码库克角。但它不起作用。但是,当您直接将其粘贴到浏览器时,此url可以工作。

我用来发送URL代码:

$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_USERAGENT, 'PHP/' . phpversion()); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($curl, CURLOPT_HEADER, FALSE); 
curl_setopt($curl, CURLOPT_TIMEOUT, 60); 
$response = curl_exec($curl); 
echo '<pre>post_request response' . print_r($response, true) . '</pre>'; 
if (curl_errno($curl)) { 
    $this->response = curl_error($curl); 
    return $this->response; 
    curl_close($curl); 
} 

curl_close($curl); 

或本:

$response = wp_remote_post($url, array(
    'method' => 'POST', 
    'timeout' => 70, 
    'sslverify' => 0 
    )); 

有谁可以帮我出这个问题,或者给我一些可能的解决方案?我会非常感激。

+0

*“它不工作”* - 您应该使这部分更清晰。发生了什么?你有什么期望呢?你甚至会得到一些错误信息?是的,SPACE字符是URL中的保留字符,您需要对其进行编码(这是浏览器在放入时的功能)。 – hakre 2013-03-16 12:14:33

+0

只需点击一个链接就可以在浏览器中工作,这意味着您不需要使用POST方法。另外,在你展示的curl代码中,你并没有实际执行请求。 – 2013-03-16 12:15:57

+0

如果我没有编码'点厨师',错误消息是400个不好的请求。 但如果我没有编码,错误消息是404未找到 – leoyfm 2013-03-16 12:18:41

回答

0

感谢您的光临和Colin Morelli。从你们提供的答案中,我发现代码中存在真正的问题。

首先要使用rawurlencode。此功能将point cook转换为point%20cook,这是正确的格式。 urlencode函数将point cook转换为point+cook,这在服务器端不可接受。

科林莫雷利提到的第二个问题是,我用担心的方法发送网址。我应该使用GET而不是POST。

谢谢你们!

相关问题