0

curl を使用して画像とその他のオプションをサーバーに送信しようとしていますが、なぜ機能しないのかわかりません。コードは次のとおりです。

<?php

header('Location: https://www.reporo.com/analytics/inventory-advertiser-banner.php?clientid=xxxx&campaignid=xxxx&type=smrc');

$uploadUrl = "C:\wamp\www\autofill\demo_300x250.png";
$uploadUrl = "@$uploadUrl";


$post_data['description'] = 'Name';
$post_data['url'] = 'http://www.url.pl';
$post_data['campaignid'] = xxxxx;
$post_data['clientid'] = xxxxx;
$post_data['bannertext'] = 'some text';
$post_data['upload_smrc'] = $uploadUrl;

    foreach ( $post_data as $key => $value)
{
    $post_items[] = urlencode($key) . '=' . urlencode($value);
}
$post_string = implode ('&', $post_items);

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt ($ch, CURLOPT_REFERER, "https://www.reporo.com/analytics/inventory-advertiser-banner.php?clientid=xxxxx&campaignid=xxxxx&type=smrc");
curl_setopt ($ch, CURLOPT_URL, 'https://www.reporo.com/analytics/inventory-advertiser-banner-update.php');
$upload_result = curl_exec ($ch);

curl_close ($ch);

?>

$post_data のインデックスは正しいです。フォームは CURLOPT_REFERER と同じリンクにあります。field action i form には次が含まれます: inventory-advertiser-banner-update.php 。

さらに、curlを使用してこのサイトにログインできませんが、以前にログインしたときにリダイレクトが機能するため、機能するはずです。

このサイトのサイトはcurlが使えない可能性はありますか?以前は解決できなかったログインの問題がありましたが、今はこれです。

たぶん回避策がありますか?

ご挨拶。

4

3 に答える 3

1

SSL ピア検証をオフにすることはお勧めできません。SSL ピア検証を使用する場合は、Windows で次のソリューションをすべてのアプリケーションに対してグローバルに使用できます。

  1. ここからルート証明書を含むファイルをダウンロードします: http://curl.haxx.se/docs/caextract.html
  2. php.ini に追加:

curl.cainfo=C:/path/to/ca-bundle.crt

それはすべて魔法です。CURL は証明書を検証できるようになりました。

于 2012-11-26T12:32:11.737 に答える
0

これが原因ではないかもしれませんがurlencode、POST 文字列を手動で作成する場合は、キーと値を POST する必要があります。

foreach ($post_data as $key => $value) {
    $post_items[] = urlencode($key) . '=' . urlencode($value);
}
$post_string = implode ('&', $post_items);

&そうしないと、キーまたは値のいずれかに=などが含まれていると、あらゆる種類の予期しない結果が得られます。

CURLOPT_POSTFIELDSそうは言っても、代わりに配列を直接使用できます。

curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data);

于 2012-09-13T12:41:45.423 に答える
-1

問題を抱えている可能性が高いCURLOPT_SSL_VERIFYHOST

試す

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
于 2012-09-13T12:39:37.117 に答える