开发者

curl post file behind a proxy returns error

I am trying to post an image file to a server. Initially I tested my script without proxy at my home and it worked fine. But when I used the same script in my college it is throwing some error. The function for uploading images is as below

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"=开发者_C百科>$dir
    );
    print_r($post_array);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array); 
    $response = curl_exec($ch);
    echo $response; 

}

and uploader.php is a normal file which just saves the image.

The error which I am getting is like this

        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) 


The problem is the proxy our institute using is "SQUID". And Squid doesn't support Expect: 100-continue.

So finally added this to my options

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

and its all working fine.


if above solution does not work please add

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data",'Expect:  '));


We had a similar error where adding the header Expect: fixed our proxy error. However, the problem was a problem with curl itself. Versions <= 7.68 didn't work and versions >= 7.70 worked fine.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜