尝试在CURL POST调用中发送文件时出错

时间:2019-06-21 09:58:13

标签: php laravel curl

我正在尝试从Laravel应用程序向Bullhorn API进行调用,以将文档转换为HTML,但是似乎文件未附加到调用中。下面是我的代码:

$data = curl_file_create("full/path/to/file.docx", 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'testcv');

$ch = curl_init();

curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

$response = curl_exec($ch);

但是我收到以下500错误:

  

上传的错误文件:请求不包含多部分/表单数据或多部分/混合流,内容类型标头为application / x-www-form-urlencoded

当我尝试显式设置Content-Type时:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: multipart/form-data'
));

我仍然收到500错误,只是略有不同:

  

文件上传错误:由于未找到多部分边界,因此请求被拒绝

我不认为这是Bullhorn API的问题,因为通过命令行执行以下调用可以正常工作:

curl -X POST "https://restXXX.bullhornstaffing.com/rest-services/{corptoken}/resume/convertToHtml?format=docx&BhRestToken={bhRestToken}" -F "file=@full\path\to\file.docx"

我认为由于某种原因该文件未附加到我的PHP调用中,但我不知道为什么。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

import pandas as pd temp=u"""Column_1;Unnamed_column;Column_2;Unnamed_column a;d;f;g 1;5;5;6 7;8;9;4""" #after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv' df = pd.read_csv(pd.compat.StringIO(temp), sep=";", header=[0,1]) print (df) Column_1 Unnamed_column Column_2 Unnamed_column a d f g 0 1 5 5 6 1 7 8 9 4 a = df.columns.get_level_values(0) b = df.columns.get_level_values(1) df.columns = [a.to_series().mask(lambda x: x.str.startswith('Unnamed')).ffill(), b] print (df) Column_1 Column_2 a d f g 0 1 5 5 6 1 7 8 9 4 使用边界参数进行封装,您可以将边界值作为字符串传递

content-type: multipart/form-data

边界是字符串“-”,后跟随机字符串。

https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

答案 1 :(得分:0)

如果我对请求有任何奇怪的问题,我总是将请求放入postman并在其中进行测试,因为它会为您编译大多数标题和选项,然后只需点击右上角的代码按钮以所需的任何语言生成代码。

对于您的情况,您可以将$ data变量数据转储(dd),并将其复制到邮递员字段之一,然后设置url和请求类型,然后运行它,然后看看您得到了什么。

仅是有关如何调试此类问题的建议,希望对您有所帮助!祝你好运!