代理后面的 curl 发布文件返回错误
Posted
技术标签:
【中文标题】代理后面的 curl 发布文件返回错误【英文标题】:curl post file behind a proxy returns error 【发布时间】:2011-09-08 19:55:56 【问题描述】:我正在尝试将图像文件发布到服务器。最初,我在家中测试了没有代理的脚本,它运行良好。但是当我在大学里使用相同的脚本时,它会抛出一些错误。图片上传功能如下
function upload($filepath,$dir)
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_PROXY, 'localhost:7777');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'ae07b026:kpack');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, 'http://finalytics.in/sites/scrap/uploader.php' );
$post_array = array(
"my_file"=>"@".$filepath,
"upload"=>"Upload",
"dir"=>$dir
);
print_r($post_array);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array);
$response = curl_exec($ch);
echo $response;
uploader.php 是一个普通文件,只是保存图片。
我得到的错误是这样的
ERROR
The requested URL could not be retrieved
While trying to process the request:
POST /sites/scrap/uploader.php HTTP/1.1
Proxy-Authorization: Basic YWUwN2IwMjY6a3BhY2s=
User-Agent: Mozilla/4.0 (compatible;)
Host: finalytics.in
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 87022
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------07ae68105e71
The following error was encountered:
Invalid Request
Some aspect of the HTTP Request is invalid. Possible problems:
Missing or unknown request method
Missing URL
Missing HTTP Identifier (HTTP/1.0)
Request is too large
Content-Length missing for POST or PUT requests
Illegal character in hostname; underscores are not allowed
Your cache administrator is webmaster.
Generated Sun, 05 Jun 2011 17:26:33 GMT by proxy1.iitm.ac.in (squid/2.7.STABLE7)
【问题讨论】:
只是猜测,但你的大学代理真的在你的本地主机上吗? 不是,我正在隧道学术代理并使用它。 【参考方案1】:问题是我们研究所使用的代理是“SQUID”。 而且 Squid 不支持 Expect: 100-continue。
所以最后把这个添加到我的选项中
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
一切正常。
【讨论】:
【参考方案2】:我们有一个类似的错误,添加标题Expect:
修复了我们的代理错误。但是,问题出在 curl 本身的问题上。 = 7.70 的版本可以正常工作。
【讨论】:
【参考方案3】:如果上述解决方案不起作用,请添加
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data",'Expect: '));
【讨论】:
以上是关于代理后面的 curl 发布文件返回错误的主要内容,如果未能解决你的问题,请参考以下文章
jenkins 使用nginx 反向代理或者采用curl无法调用(403)