1

我正在尝试让 cURL(或 get_file_contents)从以下 URL 获取内容:

http://localhost:8080/solr/select?q={!geofilt score=distance sfield=geo pt=20.570529,-100.408635 d=20}&sort=score asc&fq=restaurantes&defType=!edismax&wt=json&indent=true&start=0&rows=20&fl=*,score

我从这两种方法(cURL 和 get_file_contents)中得到的只是 HTTP 505 错误。但是,如果我将链接复制并粘贴到 Firefox 之类的浏览器,它就可以正常工作...

我尝试的最后一件事是强制 cURL 使用不同的 HTTP 版本,例如:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

没有任何运气。

我的代码适用于其他 URL,比如这个:

http://localhost:8080/solr/select?q=restaurantes&defType=edismax&qf=category^20.0+name^10.0+keywords^10.0+address^2.0&wt=json&indent=true&start=0&rows=20&fl=*,score

明显的区别在于 {、=、}、! 等字符。在网址中。但是,为什么 Firefox 可以工作?

4

2 回答 2

10

愚蠢的 URL 空间......这修复了它。

$qs = str_replace(' ', '+', $qs);

谢谢

更新:看看 PHP 的urlencode函数。

于 2013-08-03T02:07:52.050 回答
2

我假设使用 cURL 您需要对请求参数进行完全 URL 编码(因此空格转换为 + 等),并且 Firefox 在幕后为您执行此操作。

一种方法是将您的论点传递给http_build_query().

于 2013-08-03T02:09:20.960 回答