我试图做这样的事情,但是没有用!
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://google.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('GET /search?q=kk HTTP/1.1
Host: www.google.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Proxy-Connection: Close
Cookie: PREF=ID=2bb051bfbf00e95b:U=c0bb6046a0ce0334:
Cache-Control: max-age=0
Connection: Close
'));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Run Code Online (Sandbox Code Playgroud)
另外,是否可以仅设置标题就发出整个请求,而无需设置URL?我的意思是没有这个?
curl_setopt($ch, CURLOPT_URL, "http://google.com/");
Run Code Online (Sandbox Code Playgroud)
谢谢!
我知道了。
1)将标题更改Host: www.google.de为Host: www.google.com
动机:Host标头中指定的主机应与URL的主机完全匹配。
2)使用“ www.google.com”代替“ google.com”
动机:向google.com发出的搜索请求不会检索搜索结果。系统会提示您访问www.google.com。
3)将完整URL设置为CURLOPT_URL,而不仅仅是主机名。例如,将CURLOPT_URL更改为curl_setopt($ch, CURLOPT_URL, "http://www.google.com/search?q=kk");
动机:正确使用cURL API。
4)GET /search?q=kk HTTP/1.1从CURLOPT_HTTPHEADER中删除-放错了位置。
动机:正确使用cURL API。
5)响应将被gzip或deflate压缩。要停止此操作,请删除Accept-Encoding: gzip, deflate请求标头。
动机:如果您告诉Google您有能力接收压缩的回复,那么他们会向您发送回复。解压缩HTTP响应是您可能不想执行的额外步骤。如果响应采用未压缩的文本形式,则可能更容易处理。