使用Chrome标头模拟HTTP发布请求

时间:2012-08-31 13:56:48

标签: java http post

登录浏览器游戏时,我会在Headers后面使用Chrome开发者工具嗅探:

Request URL:https://bild.anmeldung.axelspringer.de/sso2/web/login?service=https://supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do

Request Method:POST

Status Code:302 Moved Temporarily

Request Headersview source

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate,sdch

Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

Cache-Control:max-age=0

Connection:keep-alive

Content-Length:79

Content-Type:application/x-www-form-urlencoded

Cookie:JSESSIONID=0B4CFB76ADE52AA77F78A1ADB82C8A77; BIGipServeras_sso2_auth_http=2206210988.20480.0000

Host:bild.anmeldung.axelspringer.de

Origin:https://bild.anmeldung.axelspringer.de

Referer:https://bild.anmeldung.axelspringer.de/sso2/web/login?service=https://supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do

User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1

Query String Parameters service:https://supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do

Form Dataview

username:xxxxx@gmail.com

password:xxxxx

_eventId_submit:Login

lt:e2s1

因此,我尝试使用以下JAVA程序模拟此HTTP POST:

package org.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

public class Main {

    public static void main(String[] args) throws ClientProtocolException, IOException {
    String target = "https://bild.anmeldung.axelspringer.de/sso2/web/login?service=https://supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do";
    HttpClient client = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(target);
    BasicNameValuePair[] params = { new BasicNameValuePair("username", "xxxx@gmail.com"),
        new BasicNameValuePair("password", "xxxxx"), new BasicNameValuePair("_eventId_submit", "Login"),
        new BasicNameValuePair("lt", "e1s1") };

    httpPost.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    httpPost.setHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
    httpPost.setHeader("Accept-Encoding", "gzip,deflate,sdch");
    httpPost.setHeader("Accept-Language:", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4");
    httpPost.setHeader("Cache-Control", "max-age=0");
    httpPost.setHeader("Connection", "keep-alive");
    httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
    httpPost.setHeader("Host", "bild.anmeldung.axelspringer.de");
    httpPost.setHeader("Origin", "https://bild.anmeldung.axelspringer.de");
    httpPost.setHeader(
        "Referer",
        "https://bild.anmeldung.axelspringer.de/sso2/web/login?service=https://supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do");
    httpPost.setHeader("User-Agent",
        "ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1");

    UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(Arrays.asList(params));
    urlEncodedFormEntity.setContentEncoding(HTTP.UTF_8);
    httpPost.setEntity(urlEncodedFormEntity);
    HttpResponse response = client.execute(httpPost);

    System.out.println(response.getStatusLine().getStatusCode());
    System.out.println(response.getHeaders("Location")[0].getValue());
    InputStream input = response.getEntity().getContent();
    InputStreamReader isr = new InputStreamReader(input);
    BufferedReader br = new BufferedReader(isr);
    String line = null;
    while ((line = br.readLine()) != null) {
        System.out.printf("\n%s", line);
    }
    System.out.println("test");
    client.getConnectionManager().shutdown();
    }

}

(我不知道为什么语法高亮不起作用)

成功登录后Chrome Developer Tools的响应标题如下所示:

  

缓存控制:无存储缓存控制:无缓存连接:关闭

     

Content-Length:0 Content-Type:text / plain; charset = UTF-8日期:星期五,31   2012年8月13:36:41 GMT到期日:1970年1月1日星期四00:00:00 GMT

     

位置:HTTPS:?//supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do票= ST-269xxx14-XXXXXXXXXXX-SSO-登入服务器

     

P3P:CP =“ALL ALL CUR ADM DEV COM CONI选择我们的LEG ONL PUR DSP”

     

Pragma:no-cache服务器:Apache Set-Cookie:CASPRIVACY =“”;过期=星期四,   1970年1月1日00:00:00 GMT;路径= / SSO2;仅Http

     

设置Cookie:BILD_CASTGC = TGT-16889-hdlIRDDFzuXccyoEVZfYKYHuJySuM4XCrrNLDMnkfwGEgCTBfp-SSO-登入服务器;路径= / SSO2;安全;仅Http

Java Programm应该从响应Header返回“Location”参数,但它不起作用。这里有什么不对?我忘了什么吗?

我的Java程序的输出是这样的:

302
https://bild.anmeldung.axelspringer.de/sso2/web/login;jsessionid=E9B2XXXXXXXXCE62B0FB5A2F06175BB9?service=https://supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do
test

返回值“302”正确但Location参数错误。我需要此Location参数值来获取“Ticket”值:

位置:HTTPS:?//supermanager.bild.de/CleverTV/de/bild/fantasy/22/bildSSOlanding.do票= ST-269xxx14-XXXXXXXXXXX-SSO-登入服务器

此致 桑德罗

0 个答案:

没有答案