5

こんにちは、PHP cURL を使用して画像を送信する必要があります。次のようにしようとしました。

$this->ch = curl_init();
curl_setopt($this->ch, CURLOPT_URL, $URL);
$postValues = array(
            'utf8' => $utf8,
            'authenticity_token' => $auth_token,
            'media_object[title]' => 'something',
            'media_object[source]' => '',
            'media_object[object_type]' => 0,
            'media_object[image]'=>'@/home/me/images/something.jpg',
            'captcha' => $captcha,
        );

$n = 0;
        $postStr = '';
        foreach ($postValues as $name => $value) {
            if ($n == 0)
                $postStr .= $name . '=' . $value;
            else
                $postStr .= '&' . $name . '=' . $value;
            $n++;
        }
        curl_setopt($this->ch, CURLOPT_URL, $url);
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $postStr);
        curl_setopt($this->ch, CURLOPT_POST,1);
curl_setopt($this->ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1");
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($this->ch, CURLOPT_COOKIEFILE, TMP.'cookies.txt');
        curl_setopt($this->ch, CURLOPT_COOKIEJAR, TMP.'cookies.txt');
curl_exec($this->ch);

しかし、うまくいきません。もちろん、このコードで通常の POST リクエストを実行しようとしましたが、正常に機能しますが、画像を投稿しようとすると機能しません。

LIVE HTTP HEADERS を介してヘッダーをキャプチャしましたが、次のようになります。

Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 218115
-----------------------------41184676334
Content-Disposition: form-data; name="utf8"

â
-----------------------------41184676334
Content-Disposition: form-data; name="authenticity_token"

0Je50mUpOMdghYgHPH5Xjd8UnbuvzzQLyyACfvGmVgY=
-----------------------------41184676334
Content-Disposition: form-data; name="media_object[title]"

Something
-----------------------------41184676334
Content-Disposition: form-data; name="media_object[source]"


-----------------------------41184676334
Content-Disposition: form-data; name="media_object[object_type]"

0
-----------------------------41184676334
Content-Disposition: form-data; name="media_object[image]"; filename="something.jpg"
Content-Type: image/jpeg

ÿØÿà

何か問題がありますか?画像を送信しようとしている Web ページで、「ファイル名を空にすることはできません!」というメッセージが返されます。また、「@/home/me/images/something.jpg」の後に;filename="something.jpg"と;type="image/jpeg"を追加しようとしました

4

2 に答える 2

2

数週間前に同様の問題が発生しました。ファイルの場所またはアクセス許可を変更してみてください。送信をカールするヘッダーを見つけるには、次のことを試してください。

curl_setopt(CURLINFO_HEADER_OUT, true);

リクエスト後、ヘッダーに関する情報を取得します。

curl_getinfo($this->ch, CURLINFO_HEADER_OUT)
于 2012-09-07T00:57:59.413 に答える
0

この部分を削除して問題を解決しました:

$n = 0;
        $postStr = '';
        foreach ($postValues as $name => $value) {
            if ($n == 0)
                $postStr .= $name . '=' . $value;
            else
                $postStr .= '&' . $name . '=' . $value;
            $n++;
        }

そしてこれを変更しましたcurl_setopt($this->ch, CURLOPT_POSTFIELDS, $postStr);curl_setopt($this->ch, CURLOPT_POSTFIELDS, $postValues);

「Content-Type: multipart/form-data」を取得するには、ポストフィールドが配列である必要があります。

于 2012-09-07T05:30:42.327 に答える