使用php(cURL)访问受保护的表单,从CSV提交和检索结果

时间:2015-10-07 23:26:11

标签: php curl

这感觉超出了janky,但我们的供应商没有给我任何其他选择。我需要访问他们的表单并从通过cURL(或替代)生成的结果csv中提取数据。他们愿意提供的唯一例子是冷聚变(我知道......)

<cfsetlocal.username = 'username' />
<cfsetlocal.password = 'Password' />
<cfhttp url="http://stupidvendor.com/users"
method="POST"
username="#local.username#"
password="#local.password#"
result="result">
<cfhttpparam type="URL" name="header_required" value="0" /> </cfhttp>
Downloading <cfoutput>#result.ResponseHeader.Location#</cfoutput><br><br>
<cfhttpurl="#result.ResponseHeader.Location#" method="get"
username="#local.username#" password="#local.password#"
file="Result.csv"
path="#expandPath('.')#"/>
Saved as Result.csv

我尝试了很多尝试,但由于我不是cURL的专家,所以非常感谢所有建议或链接。

更新:我能够获取网址的内容,但它是一个html表单,需要提交以生成CSV,然后我需要其中的内容。这是我不确定如何处理的最后步骤,或者这是否可行cURL

1 个答案:

答案 0 :(得分:0)

我也不熟悉ColdFusion,所以我希望这对某些人有所帮助。如果表单受Apache / Nginx身份验证要求保护,则需要使用CURLOPT_USERPWD传递用户名和密码。这是一个使用示例。

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_USERPWD,  "user@stupidvendor.com:my_password");

curl_setopt($ch, CURLOPT_URL, 'http://stupidvendor.com/users');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

curl_close($ch);

您获得的结果将是页面的内容。由于您没有指定CSV的来源,我不确定如何提供帮助。

我构建的几个应用程序需要登录才能获取信息,但是他们使用正常的登录表单,然后存储cookie(会话ID),然后它就可以访问受保护的数据。

要提交表单数据,您只需要模拟表单正在执行的操作。因此,如果表单对页面发出POST请求,那么您使用所需的POST数据对该页面执行cURL。作为一个例子,不知道任何关于表格的事情。

// This is the data the from would submit
$postFields = array(
    'document' => 'report',
    'format' => 'csv'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_USERPWD,  "user@stupidvendor.com:my_password");

// This is the URL the form submits to
curl_setopt($ch, CURLOPT_URL, 'http://stupidvendor.com/users');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Assuming the from does a POST not a GET submission
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postFields));
curl_setopt($ch, CURLOPT_POST, true);

$result = curl_exec($ch);

curl_close($ch);

从那里,你需要查看$result中的数据,看看他们发送的是什么,是文件本身还是HTML文档中文件的链接。