如何使用HttpURLConnection通过登录下载文件

对于我的Android应用程序,我需要从需要登录的站点下载文件.它不是基本的http身份验证,而是表单模拟.

刚接触Android我真的不知道怎么开始,但在PHP中使用cUrl很容易:

// Set standard options
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "somecookiejar");
curl_setopt($ch, CURLOPT_COOKIEFILE, "somecookiefile");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Login
curl_setopt($ch, CURLOPT_URL, "https://example.com" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=myusername&password=mypassword");
curl_exec($ch);

// Get the file
curl_setopt($ch, CURLOPT_URL, "http://example.com/files/myfile.mp3");
curl_setopt($ch, CURLOPT_POST, 0 );
writefile(curl_exec($ch), "myfile.mp3");
curl_close($ch);

我很感激在Android中完成任务有任何帮助.

注意:我在主题中提到了HttpURLConnection,但其他建议当然非常受欢迎:)

编辑:我想我应该澄清一下.在登录表单的第一个请求中,设置了用户名和密码.服务器返回一组cookie,然后将其移交给发生实际文件下载的第二个请求.代码实际上是PHP的一个工作示例(尽管是匿名的),我的具体问题是处理请求之间的cookie.在cUrl中,所有这些cookie都会自动发生.
谢谢!

解决方法:

您将要将HttpClient对象与HttpPost,HttpGet和HttpResponse对象结合使用.看一个例子可能更容易.

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(context.getString(R.string.loginURL));
HttpResponse response = null;
List<NameValuePair> postFields = new ArrayList<NameValuePair>(2);  

// Set the post fields
postFields.add(new BasicNameValuePair("username", settings.getString("username", "null")));
postFields.add(new BasicNameValuePair("password", settings.getString("password", "null")));
post.setEntity(new UrlEncodedFormEntity(postFields, HTTP.UTF_8));

// Execute the POST request
response = client.execute(post);

假设登录成功,您现在可以作为经过身份验证的用户执行GET和POST请求,只要您通过执行登录的HttpClient执行它们即可.正是这个对象管理着cookie.希望这可以帮助!

编辑:忘了提到你当然可以使用HttpRespose对象来执行错误检查.

上一篇:Java中HttpURLConnection中的荒谬的连接超时


下一篇:java – HttpURLConnection.getResponseCode()在代码已知时抛出IOException