将表单发送到https

时间:2012-09-13 12:32:31

标签: php curl https

我正在尝试使用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位于同一链接中。我的表单字段操作包含:inventory-advertiser-banner-update.php。

此外,我无法使用curl登录此站点,但是当我之前登录时,重定向工作,所以它应该工作。

该站点网站是否有可能无法使用卷曲?我问,因为在我遇到登录问题之前我没有解决,现在这个。

也许有办法解决方法?

问候。

3 个答案:

答案 0 :(得分:1)

关闭SSL对等验证并不是一个好主意。 如果您想使用SSL对等验证,您可以在Windows上为所有应用程序使用下一个解决方案:

  1. 从此处下载带有根证书的文件: http://curl.haxx.se/docs/caextract.html
  2. 添加到php.ini:
  3. curl.cainfo=C:/path/to/ca-bundle.crt

    这一切都很神奇,CURL现在可以验证证书了。

答案 1 :(得分:0)

这可能不是原因,但如果您手动构建POST字符串,则需要urlencode 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);

答案 2 :(得分:-1)

您可能会遇到CURLOPT_SSL_VERIFYHOST

的问题

尝试

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);