我正在尝试让cURL(或get_file_contents)从以下网址获取内容:
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);
没有任何运气。
我的代码适用于其他网址,例如:
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
明显的区别在于{,=,}等字符!在URL中。但是,为什么Firefox有效?
答案 0 :(得分:8)
答案 1 :(得分:2)
我假设使用cURL,您需要对请求参数进行完全URL编码(因此空格转换为+等),并且Firefox会在幕后为您执行此操作。
一种方法是将您的参数传递给http_build_query()
。