C# 使用C从订阅网站(PHP页面)下载文件#
我是一名Asp.NETC#开发人员,我想从PHP站点下载一个CSV文件。 如果已经讨论过,请道歉,但在本例中,链接显示的是javascript表单提交 现在我们在登录页面上登录 然后在搜索页面上输入日期。 “结果”页面以Html格式显示结果,并且还有一个“下载”链接,单击该链接将发送一个CSV文件 我们希望定期通过屏幕抓取/下载CSV文件来“拉”CSV文件 “下载”链接显示了将表单提交回服务器以下载CSV文件的以下javascript:C# 使用C从订阅网站(PHP页面)下载文件#,c#,php,forms,download,submit,C#,Php,Forms,Download,Submit,我是一名Asp.NETC#开发人员,我想从PHP站点下载一个CSV文件。 如果已经讨论过,请道歉,但在本例中,链接显示的是javascript表单提交 现在我们在登录页面上登录 然后在搜索页面上输入日期。 “结果”页面以Html格式显示结果,并且还有一个“下载”链接,单击该链接将发送一个CSV文件 我们希望定期通过屏幕抓取/下载CSV文件来“拉”CSV文件 “下载”链接显示了将表单提交回服务器以下载CSV文件的以下javascript: javascript:document.aForm.act
javascript:document.aForm.action='download.php'; setTarget();document.aForm.submit();
我想设置一个C#控制台应用程序,以便定期运行:
登录并下载CSV文件
Curl
作为参考,您可以按照以下步骤操作
要登录到特定页面,您可以尝试以下操作
WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
byte[] bret = client.UploadData("http://www.website.com/post.php", "POST",
System.Text.Encoding.ASCII.GetBytes("field1=value1&field2=value2") );
string sret = System.Text.Encoding.ASCII.GetString(bret);
获得成功响应后,可以解析该响应字符串以获得该超链接,然后使用Webclient.DownloadFile
下载该文件
try
{
client.DownloadFile("http://www.xyz.com/download.php","abc.csv");
Console.WriteLine("File Saved.");
}
catch (WebException we)
{
Console.WriteLine(we.Message + "\n" + we.Status.ToString());
}
catch (NotSupportedException ne)
{
Console.WriteLine(ne.Message);
}
我猜在您的例子中,hyperlinkjavascript
正在向download.php
发送帖子,因此您可以使用webclient.downloadFile
手动发送帖子,而不用使用webclient
。以上我已经向您展示了如何发布。是的,您可以使用类来下载文件,也可以使用方法
或
您可以使用Curl
作为参考,您可以按照以下步骤操作
要登录到特定页面,您可以尝试以下操作
WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
byte[] bret = client.UploadData("http://www.website.com/post.php", "POST",
System.Text.Encoding.ASCII.GetBytes("field1=value1&field2=value2") );
string sret = System.Text.Encoding.ASCII.GetString(bret);
获得成功响应后,可以解析该响应字符串以获得该超链接,然后使用Webclient.DownloadFile
下载该文件
try
{
client.DownloadFile("http://www.xyz.com/download.php","abc.csv");
Console.WriteLine("File Saved.");
}
catch (WebException we)
{
Console.WriteLine(we.Message + "\n" + we.Status.ToString());
}
catch (NotSupportedException ne)
{
Console.WriteLine(ne.Message);
}
我猜在您的例子中,hyperlink
javascript
正在向download.php
发送帖子,因此您可以使用webclient.downloadFile
手动发送帖子,而不用使用webclient
。上面我已经向您展示了如何发布。感谢您的回复,您能否给我一个代码片段,说明如何访问由javascript表单submit(超链接url触发)触发的download.php页面。MSDN帮助显示了这一点,但我不知道文件名。页面上有一个超链接,javascript在服务器上提交一个背对背的download.php表单,该表单将“提供”CSV文件。字符串remoteUri=“”;字符串fileName=“ms banner.gif”,mystringwebsource=null;WebClient myWebClient=新WebClient();myStringWebResource=remoteUri+文件名;下载文件(mystringwebsource,文件名);请问download.php
是否受登录保护?你想从c#console登录来获取文件吗?谢谢你的回复,你能给我一个关于如何访问由javascript表单submit(超链接url触发)触发的download.php页面的代码片段吗?MSDN帮助显示了这一点,但我不知道文件名。页面上有一个超链接,javascript在服务器上提交一个背对背的download.php表单,该表单将“提供”CSV文件。字符串remoteUri=“”;字符串fileName=“ms banner.gif”,mystringwebsource=null;WebClient myWebClient=新WebClient();myStringWebResource=remoteUri+文件名;下载文件(mystringwebsource,文件名);请问download.php
是否受登录保护?你想从c#console登录来获取文件吗?你需要在你的控制台客户端复制setTarget()javascript的功能——也就是说,你需要填写任何表单字段更改或(我怀疑)URL查询字符串操作。其他一切都只是简单的经过身份验证的请求—您的问题中不明显的部分是setTarget()实际上在做什么。您需要在控制台客户端中复制setTarget()javascript的功能—也就是说,您需要填写任何表单字段更改或(我怀疑)URL查询字符串操作正在那里进行。其他的一切都只是简单的经过身份验证的请求-从您的问题中不明显的部分是setTarget()实际上在做什么。