【问题标题】:curl return http_ 400 on image download from a servercurl 在从服务器下载图像时返回 http 400
【发布时间】:2014-08-12 11:25:41
【问题描述】:
function get_fcontent( $url,  $javascript_loop = 0, $timeout = 5 ) {
    $url = str_replace( "&", "&", urldecode(trim($url)) );

    $cookie = tempnam ("/tmp", "CURLCOOKIE");
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_ENCODING, "" );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );    # required for https urls
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
    curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
    curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
    $content = curl_exec( $ch );
    $response = curl_getinfo( $ch );
    curl_close ( $ch );

    if ($response['http_code'] == 301 || $response['http_code'] == 302) {
        ini_set("user_agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");

        if ( $headers = get_headers($response['url']) ) {
            foreach( $headers as $value ) {
                if ( substr( strtolower($value), 0, 9 ) == "location:" )
                    return get_url( trim( substr( $value, 9, strlen($value) ) ) );
            }
        }
    }

    if (    ( preg_match("/>[[:space:]]+window\.location\.replace\('(.*)'\)/i", $content, $value) || preg_match("/>[[:space:]]+window\.location\=\"(.*)\"/i", $content, $value) ) && $javascript_loop < 5) {
        return get_url( $value[1], $javascript_loop+1 );
    } else {
        return array( $content, $response );
    }
}  


$url="http://lp.hm.com/hmprod?set=key[source],value[/model/2013/2AE 0165378 025 37 2916.jpg]&set=key[rotate],value[]&set=key[width],value[]&set=key[height],value[]&set=key[x],value[]&set=key[y],value[]&set=key[type],value[STILL_LIFE_FRONT]&hmver=0&call=url[file:/product/large]";

$image= get_fcontent($url);

print_r($image);

返回错误 http_code 400 代码和空白内容仅适用于该站点所有其他站点的图像都正确获取

Array
(
    [url] => http://lp.hm.com/hmprod?set=key[source],value[/model/2013/2AE 0165378 025 37 2916.jpg]&set=key[rotate],value[]&set=key[width],value[]&set=key[height],value[]&set=key[x],value[]&set=key[y],value[]&set=key[type],value[STILL_LIFE_FRONT]&hmver=0&call=url[file:/product/large]
    [content_type] => 
    [http_code] => 400
    [header_size] => 166
    [request_size] => 334
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.39
    [namelookup_time] => 0.047
    [connect_time] => 0.187
    [pretransfer_time] => 0.187
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => 0
    [upload_content_length] => 0
    [starttransfer_time] => 0.39
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

    [primary_ip] => 95.100.71.34
    [primary_port] => 80
    [local_ip] => 192.168.1.42
    [local_port] => 62061
    [redirect_url] => 
)

【问题讨论】:

    标签: php image url curl download


    【解决方案1】:

    替换您网址中的空格。它会起作用的。

    $url = str_replace(" ", '%20', $url);
    

    【讨论】:

      【解决方案2】:

      对 url 值进行编码

      试试这个

      $url="http://lp.hm.com/hmprod?set=key[source],value[/model/2013/2AE%200165378%20025%2037%202916.jpg]&set=key[rotate ],value[]&set=key[width],value[]&set=key[height],value[]&set=key[x],value[]&set=key[y],value[]&set=key[type ],value[STILL_LIFE_FRONT]&hmver=0&call=url[file:/product/large]";

      $image=get_fcontent($url);

      print_r($image);

      【讨论】:

        【解决方案3】:

        这里是示例代码

        $url="http://lp.hm.com/hmprod?set=key[source],value[/model/2013/2AE%200165378%20025%2037%202916.jpg]&set=key[rotate],value[]&set=key[width],value[]&set=key[height],value[]&set=key[x],value[]&set=key[y],value[]&set=key[type],value[STILL_LIFE_FRONT]&hmver=0&call=url[file:/product/large]";

             $ch=curl_init();
             curl_setopt( $ch, CURLOPT_URL, $url );
             curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
             curl_setopt( $ch, CURLOPT_BINARYTRANSFER, true);
             $content = curl_exec( $ch );
         $response = curl_getinfo( $ch );
         curl_close ( $ch );
             echo "<pre>";
             print_r( $response);
            echo "<pre>";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多