IIS 通过 php curl 发送文件但不通过邮递员发送文件时返回错误 500



这是我的场景。 用PHP(7.x(编写的Web应用程序,某个点通过cURL将一些信息和2个文件发送到Web服务器。Web服务器有一些Rest API也是用PHP(7.x(编写的。

我的问题是当我发送文件时,服务器上的 IIS (7.5( (Win 2008 R2( 返回"500 内部服务器错误"。查看错误详细信息,错误代码为"0x80070026">

如果我使用 Apache 在另一台服务器上部署 API,API 运行良好。 在IIS上,我做了一些测试,并且: - 如果我发送没有文件的 cURL 命令,API 运行正常。 - 如果我使用邮递员和附加的文件调用 API,API 也可以正常运行。

Web 应用具有此代码

$url = $this->config->item('API_endpoint').'Scans/scans/';
$username = $this->config->item('API_username');
$password = $this->config->item('API_password');
//$header = array('Content-Type: multipart/form-data');
$postData = array(
'scanDate' => date('Y-m-d H:i:s'),
...other data...
'file1' => curl_file_create('file1.stl'),
'file2' => curl_file_create('file2.stl')
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
//curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//curl_setopt($ch, CURLOPT_HEADER, false);
$result=curl_exec($ch);

服务器上的脚本读取数据并保存文件。

我也尝试添加curl_setopt(CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');

IIS 日志显示

2020-06-09 10:37:27 172.31.2.11 POST/index.php/Scans/scans/- yyyy - x.x.x.x Mozilla/4.0+(兼容;+MSIE+5.01;+Windows+NT+5.0(500 0 38 405

谢谢!


编辑: 在我的 curl 脚本中,我添加了一个 var_dump($result(;

这是输出,带有 IIS 的"详细"错误

我在IIS上使用PHP 7.3时遇到了类似的问题,使用wireshark,我发现CURL在原始POST请求之后发送了100个继续请求,POSTMAN没有。

我添加了选项curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));到我的卷曲请求

这使得 CURL 停止发送100-continue,并且 IIS 不再抛出错误代码为x80070026500

相关内容

最新更新