【问题标题】:HttpPost with parameters not working to ASP server带有参数的 HttpPost 对 ASP 服务器不起作用
【发布时间】:2013-02-18 11:40:29
【问题描述】:

我需要创建一个带有两个参数的 HttpPost 请求。我同意有很多例子,但我相信我已经完成了我的研究,但我仍然没有得到 ASP 服务器的响应。我已经尝试过 NameValuePair,但似乎无法获得响应页面。我猜这些参数没有被添加到 httpPost 对象中。

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://portal.sibt.nsw.edu.au/Default.asp");

List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("userID", id.getText().toString()));
nameValuePair.add(new BasicNameValuePair("password", pword.getText().toString()));

post.setEntity(new UrlEncodedFormEntity(nameValuePair));
HttpResponse response = client.execute(post);

String responseContent = EntityUtils.toString(response.getEntity());
Log.d("response to string", responseContent);

我再次进入登录页面,这段代码返回 NullPointerException:

String newURL = response.getFirstHeader("Location").getValue();

我在这里做错了什么?

【问题讨论】:

  • 请提交 logcat 以获得更多帮助

标签: java android http-post httpclient


【解决方案1】:

我猜你只是错过了网址末尾的?

【讨论】:

    【解决方案2】:

    试试这样的:

    private static String urlAppendParams(String url, List<NameValuePair> lNameValuePairs) {
        if (lNameValuePairs != null) {
            List<NameValuePair> llParams = new LinkedList<NameValuePair>();
            for (NameValuePair nameValuePair : lNameValuePairs) {
                llParams.add(nameValuePair);
            }
    
            String sParams = URLEncodedUtils.format(llParams, "UTF-8");
            if (!url.endsWith("?")) {
                url += "?";
            }
            url += sParams;
        }
        return url;
    }
    

    【讨论】:

    • 谢谢,这与参数一起工作,但我没有得到任何响应 EntityUtils.toString(response.getEntity()) 什么也没给我。
    • 这可能是后端的问题,或者您以错误的方式调用后端。
    • 很抱歉,我是初学者,对 Web 开发非常陌生,能否请您澄清一下您的意思,或者告诉我如何以正确的方式进行操作。谢谢
    【解决方案3】:

    您不使用 .NET 网页,您必须创建 .NET Web 服务,因为只有 WebService 有 post 和 get 方法。您不请求网页。网页未收到您的消息和答复。

    【讨论】:

    • 这不是我的网页,是我的大学,我还有什么选择?
    • 登录成功后,您在 URL 文本中看到了什么。如果文本加密,你就什么都做不了。因为我在你需要“网络服务”之前解释了。
    【解决方案4】:

    当您使用浏览器(https://portal.sibt.nsw.edu.au/Default.asp)到达主页时,服务器会打开会话(您可以通过网络检查器看到 set-cookie 标头):

    Set-Cookie:ASPSESSIONIDQCCCQQCQ=HJMMOCFAFILCLNCJIMNBACIB; path=/
    

    您可能需要在 POST 登录之前向此页面发出 GET 请求。另外,您必须在 HttpClient 中启用 cookie 跟踪。我通常使用:

    HttpClient client = new DefaultHttpClient();
    client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
    final HttpGet get = new HttpGet("https://portal.sibt.nsw.edu.au/Default.asp");
    client.execute(get); //perform an initial GET to receive the session cookie
    
    //now do the post...
    HttpPost post = new HttpPost("https://portal.sibt.nsw.edu.au/Default.asp?Summit=OK");
    
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
    nameValuePair.add(new BasicNameValuePair("hcUserID", id.getText().toString()));
    nameValuePair.add(new BasicNameValuePair("hcPassword", pword.getText().toString()));
    
    post.setEntity(new UrlEncodedFormEntity(nameValuePair));
    HttpResponse response = client.execute(post);
    
    //I should be logged in.... Lets get the an internal webpage
    get = new HttpGet("https://portal.sibt.nsw.edu.au/std_Alert.asp");
    client.execute(get);
    
    System.out.println(new String(get.getResponseBody()));
    

    由于我没有有效的用户/密码,我无法尝试此解决方案。

    【讨论】:

    • 我似乎找不到 setCookiePolicy() 方法?也不是executeMethod()我只能找到execute()你可以尝试使用这个用户名和密码用户名chsac1203密码1234567k请尽快更新我
    • 嗯,也许我说的是旧的 Httpclient api,我会用新的 API 更新代码
    • 我也尝试过使用我的浏览器登录/通过,并收到一条消息“抱歉,您的用户 ID 或密码不正确;或者您的门户帐户已被禁用。”
    • 您还必须发布到表单的“action” URL,即:portal.sibt.nsw.edu.au/Default.asp?Summit=OK
    • 请再试一次,这次会成功的,上次给您带来的不便,我们深表歉意。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多