0

这是我需要登录的网站:

我的目标是通过获取所需的数据将网站的一些元素合并到应用程序中。不幸的是,该网页需要登录。我如何从应用程序本身登录到网页,以便用户像在本机应用程序上一样登录到网站并使用会话来获取所需的数据?我虽然实现了自定义 CSS,但是还有其他/更好的方法吗?也许是 JS?

4

2 回答 2

1

这基本上是相同的方式,如果您尝试通过您的应用程序联系 gmail,您就会这样做。就目前而言,您可以对任何网站使用相同的程序。让我们看看我们如何为 Gmail 做到这一点:

现在,“点击”基本上是向服务器发送请求并以格式显示返回。

1/ 找出为该请求调用的 url(如果是网页,请参见 firebug 示例)

2/找出参数是什么,找出方法是GET还是POST

3/ 以编程方式重现。

4/“登录”阶段可能意味着使用服务器为您提供的 cookie,并且您必须在之后为每个请求发回该 cookie。

收到回复后,您需要检查一下

  response.getStatusLine().getStatusCode() < 400

它会告诉你登录成功。(2xx 成功,3xx 被移动等等。4xx 是请求中的错误,5xx 是服务器端错误;Gmail 响应 302 登录以建议重定向到收件箱)。然后,您会注意到响应“Set-Cookie”中有一个特定的标头,其中包含您想要进一步连接的 cookie,因此:

  String cookie = response.getFistHeader("Set-Cookie");

然后,您应该能够调用请求以获取联系人:

HttpGet getContacts = new HttpGet(GMAIL_CONTACTS);
getContacts.setHeader("Cookie", cookie);
response = httpClient.execute(getContacts);
InputStream ins = response.getEntity().getContent();

总而言之,代码是这样的:

    String GMAIL_CONTACTS = "https://mail.google.com/mail/?shva=1#contacts";
    String GMAIL_LOGIN = "https://mail.google.com";

    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(GMAIL_LOGIN);

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
    nameValuePairs.add(new BasicNameValuePair("Email", MY_ACC));
    nameValuePairs.add(new BasicNameValuePair("Passwd", MY_PASS));
    nameValuePairs.add(new BasicNameValuePair("signIn", "Sign In"));

    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute HTTP Post Request 
    HttpResponse response = httpClient.execute(httpPost);
    Log.d(TAG, "response stat code " + response.getStatusLine().getStatusCode());

    if (response.getStatusLine().getStatusCode() < 400) {

    String cookie = response.getFirstHeader("Set-Cookie")
    .getValue();
    Log.d(TAG, "cookie: " + cookie);

    // get the contacts page 
    HttpGet getContacts = new HttpGet(GMAIL_CONTACTS);
    getContacts.setHeader("Cookie", cookie);
    response = httpClient.execute(getContacts);

    InputStream ins = response.getEntity().getContent();
    BufferedReader in = new BufferedReader(new InputStreamReader(
    ins));

我看不出有任何理由,为什么你不能在你的情况下应用同样的方法。这个过程太相似了。

于 2013-06-25T10:30:16.487 回答
0

您可以使用 Webview 加载页面,使用 webview.loadUrl(urlString); 这与在桌面上的工作方式相同,但您仍然必须注意页面的分辨率(即 UI 组件的高度/宽度)。

希望对您有所帮助,如果您需要更多帮助,请告诉我

于 2013-06-25T10:27:03.260 回答