抓取远程图片转POST提交

原理:将远程图片二进制封装成http数据包提交到表单

<?php  

//远程图片转POST $k name参数
function updateInternetImg($file,$boundary,$k='media') {

    // invalid characters for "name" and "filename"
    static $disallow = array("", """, "r", "n");
    
    // build file parameters
    $data = file_get_contents($file);
    $v = call_user_func("end", explode('/', $file));
    $type = call_user_func("end", explode('.', $file));
    $v = str_replace($disallow, "_", $file);
    $body[] = implode("rn", array(
        "Content-Disposition: form-data; name="{$k}"; filename="{$v}"",
        "Content-Type: image/".$type,
        "",
        $data, 
    ));
    
    // generate safe boundary 
    do {
        $boundary = $boundary;
    } while (preg_grep("/{$boundary}/", $body));
    
    // add boundary for each parameters
    array_walk($body, function (&$part) use ($boundary) {
        $part = "--{$boundary}rn{$part}";
    });
    
    // add final boundary
    $body[] = "--{$boundary}--";
    $body[] = "";
    
    // set options
    return implode("rn", $body);
}


$ch = curl_init("http://127.0.0.1");
$boundary = "---------------------" . md5(mt_rand() . microtime());
$re = updateInternetImg("http://127.0.0.1/logo.png",$boundary);
curl_setopt($ch,CURLOPT_POSTFIELDS,$re);
curl_setopt($ch,CURLOPT_POST,1);

curl_setopt($ch,CURLOPT_HTTPHEADER,array(
            "Expect: 100-continue",
            "Content-Type: multipart/form-data; boundary={$boundary}", // change Content-Type
        ));

$re = curl_exec($ch);
if($re){
    var_dump($re);
}
curl_close($ch);

?>