繁体   English   中英

PHP cURL:curl_exec到重定向的网络表单

[英]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的输出

  • 添加句柄:conn:0x7fa754818000
  • 添加句柄:发送:0
  • 添加句柄:recv:0
  • Curl_addHandleToPipeline:长度:1
  • Conn 16(0x7fa754818000)send_pipe:1,recv_pipe:0
  • 即将connect()到example.com端口80(#16)
  • 正在尝试XX.XXX.XXX.XXX ...
  • 已连接至example.com(XX.XXX.XXX.XXX)端口80(#16)
  • POST /Converter/index.pl HTTP / 1.1
  • 主持人:example.com
  • 接受: /
  • 内容长度:249010577
  • 期望:100-继续
  • 内容类型:多部分/表单数据; 边界= ---------------------------- 52f3c644b6de

  • HTTP / 1.1 100继续

  • HTTP / 1.1 200 OK
  • 日期:2015年5月1日,星期五,格林尼治标准时间14:01:17
  • 服务器Apache / 2.2.22(Win32)未列入黑名单
  • 伺服器:Apache / 2.2.22(Win32)
  • 传输编码:分块
  • 内容类型: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM