[英]PHP cURL: curl_exec to a webform that redirects
我是cURL的新手,让它无法正常工作。 我需要发送一些参数,以及将文件上传到网络表单。 有问题的Web表单将获取文件和输入参数,并将文件转换为另一种格式。 直接使用此Web表单时,提交重定向到一个新页面,该页面显示一个进度条,该进度条显示文件转换的进度。 完成后,将出现下载链接。
我需要做的是提交一个文件(带有参数),等待转换完成,下载文件,然后继续处理已下载文件的PHP代码。 但是,我在使用cURL时遇到了麻烦,并且不确定是否与重定向到出现进度条的页面有关。 示例代码如下:
$full_file_path = realpath($inputfile);
$data = array('param1' => '1', 'param2' => '2', 'file' => '@'.$full_file_path);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/Converter/index.pl');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
#get converted file
$file_head=substr($inputfile, 0, strpos($inputfile, '.raw'));
$output_file=$file_head.".mzXML";
$url="http://example.com/Converter/temp/".$output_file;
$fp = fopen ($output_file, 'w+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
$ response的初始实例返回空的Web表单。 我没有curl_error的错误,也没有从curl_getinfo看到错误,我可以正确连接到服务器,但是在curl过程在不到1秒的时间内完成文件转换过程大约需要5分钟。 我不确定发生了什么问题或如何获取更多信息以告诉我发生了什么。 我最好的猜测是它与重定向有关,但我不确定。
任何帮助深表感谢。
编辑
这是CURLOPT_VERBOSE的输出
内容类型:多部分/表单数据; 边界= ---------------------------- 52f3c644b6de
HTTP / 1.1 100继续
内容类型:text / html; 字符集= ISO-8859-1
与主机example.com的连接#16保持不变
我猜您可以使用header()将用户重定向到转换后的文件,也可以删除最后一个curl,并使用CURLOPT_FOLLOWLOCATION, true
在第一个curl上为CURLOPT_FOLLOWLOCATION, true
,即:
$full_file_path = realpath($inputfile);
$data = array('param1' => '1', 'param2' => '2', 'file' => '@'.$full_file_path);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/Converter/index.pl');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
#get converted file
$file_head=substr($inputfile, 0, strpos($inputfile, '.raw'));
$output_file=$file_head.".mzXML";
$url="http://example.com/Converter/temp/".$output_file;
$fp = fopen ($output_file, 'w+');
header("Location: $url");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.