2013-10-05 53 views
1

我正在尝试连接外部服务器以进行作业。但是,我很困惑如何继续。我有以下代码:我收到来自cURL请求的HTML表单响应

$username = '****'; 
$password = '****'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://****:9443/submitorder'); 
curl_setopt($ch, CURLOPT_USERPWD, $username.':'.$password); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml")); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
$result = curl_exec($ch); 
echo $result; 

当我echo $result现在,我得到一个HTML表单:

This is the <code>$results</code> I get back from the cURL request:

我怎么张贴到使用卷曲这种形式?我需要上传一个自定义的XML脚本,但正如我所理解的cURL,一切都是使用一个请求完成的。您在一个请求中连接,上传并收到全部答复。如何将数据存入此服务器?

我收到回$result的HTML如下:

<form enctype="multipart/form-data" method="post"> XML Order Envolope File: <input name="filename" type="file"> <input type="submit" value="Send"> </form>

+0

的可能重复的[卷曲PHP文件上传(http://stackoverflow.com/questions/3892617/curl-php-file-upload) –

回答

1

要使用POST上传文件,使用CURLOPT_POSTFIELDS选项:

CURLOPT_POSTFIELDS

的完整的数据在HTTP“POST”操作中发布。

要发布文件, 需要在文件名前加上@并使用完整路径。

该文件类型可以是 ,通过跟随文件名以 格式;type=mimetype中的类型明确指定。

此参数可以作为像para1=val1&para2=val2&...一个 urlencoded的串或作为与 字段名称的数组如作为值的密钥和字段数据传递。

如果value是一个数组,则 的Content-Type标题将被设置为multipart/form-data。

$ch = curl_init(); 

$data = array('filename' => '@C:/MyFile.xml'); 

curl_setopt($ch, CURLOPT_URL, 'http://yourserver/post.php'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

curl_exec($ch); 
+0

这岂不是:'$ data = array('filename'=>'@C:/MyFile.xml');'' – Chud37

+0

我也必须引用一个文件吗?我可以将'filename'作为字符串吗?当然,这就是所有cURL都会做的,从本地文件获取数据并将其放入字符串中。 – Chud37

+0

@ Chud37:是的,您对数据数组键/值对是正确的。 – AbdullahC