卷曲发送表单到 https

Posted

技术标签:

【中文标题】卷曲发送表单到 https【英文标题】:Curl sending form to https 【发布时间】:2012-09-06 13:06:48 【问题描述】:

我正在尝试使用 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 登录该站点,但是当我之前登录时,重定向可以正常工作,因此它应该可以正常工作。

这个站点站点可能不能使用 curl 吗?我问是因为在我遇到登录问题之前我没有解决,现在这个问题。

也许有办法解决?

您好。

【问题讨论】:

您遇到的卷曲错误是什么。可能是由于安全证书问题。见***.com/questions/521418/… 和unitstep.net/blog/2009/05/05/… 【参考方案1】:

你可能对CURLOPT_SSL_VERIFYHOST有问题

试试

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

【讨论】:

请注意disabling VERIFYPEER or VERIFYHOST makes the connection vulnerable to MITM attacks.【参考方案2】:

这可能不是原因,但如果您手动构建 POST 字符串,则需要 urlencode POST 键和值。

foreach ($post_data as $key => $value) 
    $post_items[] = urlencode($key) . '=' . urlencode($value);

$post_string = implode ('&', $post_items);

否则,如果您的任何键或值包含&amp;= 等,您将得到各种意想不到的结果。

话虽如此,您可以直接将数组与CURLOPT_POSTFIELDS 一起使用:

curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data);

【讨论】:

【参考方案3】:

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

    从这里下载带有根证书的文件: http://curl.haxx.se/docs/caextract.html 添加到 php.ini:

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

太神奇了,CURL 现在可以验证证书了。

【讨论】:

以上是关于卷曲发送表单到 https的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 向 API 发送数据(图像和表单)

如何使用 Postman 表单数据将 POST 请求发送到 Spring Boot REST API?

通过 AJAX 以 JSON 格式发送 Django 表单

PHP卷曲?阿贾克斯?将 XML 数据馈送作为动态下拉菜单导入

MySQL 因卷曲(智能)引号而窒息

axios发送post请求,提交表单数据