php curl返回400 Bad Request

Guys.

I wrote one script to get content from some links using proxy. If you know the reason and have advise, please help me. Thanks

When I run following code, then it displays 400 error code.

$linkCheck = "https://www.uwgc.org/give/donor-networks/step-up-program/2016/03/14/oh-the-places-she's-going";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $linkCheck);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, $workingProxy['port']);
curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_PROXY, $workingProxy['ip']);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $workingProxy['username'].':'.$workingProxy['password']);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 

$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error_report= curl_getinfo($ch);
curl_close($ch);

if($httpcode != 200){
        echo '<pre>' . $httpcode .'</pre>' ;
    return null;
}else{
    return $data;
}

Expected Behavior:

Getting correct content of given link.

douhan9191
douhan9191 嗨,大家好。谢谢你的提示。
一年多之前 回复
doubao6936
doubao6936 'HTTP'不是有效的代理类型,CURLOPT_PROXYTYPE不接受字符串,它采用整数。你需要检查你的curl_setopt返回值,然后你会注意到这个bug。正确的代码应该是:if(!curl_setopt($ch,CURLOPT_PROXYTYPE,CURLPROXY_HTTP)){thrownew\RuntimeException(“无法设置CURLOPT_PROXYTYPE”);}
一年多之前 回复
dsfhd78978
dsfhd78978 添加CURLOPT_VERBOSE并发布详细日志。
一年多之前 回复
dongpu9481
dongpu9481 $error_report变量的完整结果是什么?
一年多之前 回复
doutan8601
doutan8601 var_dump($data)在$data=curl_exec($ch)之后给你什么;?那个转储会帮助你吗?
一年多之前 回复
dougan1884
dougan1884 我用邮递员检查了它的网址。它适用于状态代码200。
一年多之前 回复
doufeng1249
doufeng1249 是的,它的网址运行良好,您可以在浏览器上访问它。
一年多之前 回复
dqys98341
dqys98341 您可以先使用Postman来检查URL是否正在提供正确的响应。
一年多之前 回复
doukan4795
doukan4795 你真的有权访问这个URL吗?
一年多之前 回复

1个回答



@everyone。
感谢您提示。</ p>

最后,我的代码使用以下配置 几乎是时间。</ p>

  $ ch = curl_init(); 

ncurl_setopt($ ch,CURLOPT_URL,$ linkCheck);
curl_setopt($ ch,CURLOPT_PROXY,$ proxy);

ncurl_setopt($ ch,CURLOPT_PROXYUSERPWD,$ proxyauth);
curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,1);
ncurl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ ch ,CURLOPT_HTTPPROXYTUNNEL,true);
curl_setopt($ ch,CURLOPT_HEADER,1);
curl_setopt($ ch,CURLOPT_CONNECTTIMEOUT,$ fetchTimeout);
curl_setopt($ ch,CURLOPT_TIMEOUT,$ fetchTimeout);
</ code> </ pre >

顺便说一句,我还有另外一个问题。
当网址包含重音符号(/clasificación)等奇数字符时,它不会导致致命错误。</ p>

当我使用/ clasificaci%C3%B3n而不是上面时,它再次起作用。
所以,这是我的问题。
如何更改奇数字符串,因此它将成为有效的URL。</ p >

非常感谢。</ p>
</ div>

展开原文

原文

@everyone. Thanks for your tips.

Finally, my code works with following configuration almost time.

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$linkCheck);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,$fetchTimeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $fetchTimeout);

Btw, I've got another issue. When the url includes odd characters like accent sign(/clasificación), then it doesn't work with fatal error.

When I use /clasificaci%C3%B3n instead of above, then it works again. So, here is my question. How can I change odd string, so it will be made valid url.

Thanks a lot.

drrog9853
drrog9853 如果您有其他问题,请单击“提问”按钮询问。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐