卷曲发送表单到 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);
否则,如果您的任何键或值包含&
、=
等,您将得到各种意想不到的结果。
话虽如此,您可以直接将数组与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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Postman 表单数据将 POST 请求发送到 Spring Boot REST API?