获取请求的自定义 header (Java HTTP)

Fetching a custom header of a request (Java HTTP)

我正在尝试通过 Java(使用 Apache HTTP API)实现网页的获取请求。

该网页在获取请求中发送自定义 header 值,我无法在 java 代码中模拟该值。

当我打开一个网页时,它会发送一个请求 header "AO-7DEABF" 和一些 auto-generated 值(值与登录 session 一致),然后网页除非我通过我的 java 代码发送相同的值,否则不会响应。

如何从我的 java 代码中获取 web-page 的实际值,以便我可以将它与我的请求一起发送。

我正在使用的示例代码

import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.fluent.Executor;
import org.apache.http.client.fluent.Request;

public class Test{
    public static void main(String args[]){
        HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();
        CookieStore cookieStore = new BasicCookieStore();
        Executor executor = Executor.newInstance(client).use(cookieStore);

        String url = "www.sampleurl.com";
        Request req = Request.Get(url);
        String response = executor.execute(request).returnContent().asString();
    }
}

请求Header

GET /rest/zephyr/latest/zql/executeSearch/?zqlQuery=&offset=20&maxRecords=0&expand=executionStatus&_=1444386966596 HTTP/1.1
Host: jira.devops.mnscorp.net
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
AO-7DEABF: Vwl8V0kdk7Xvyq9BFivbLpbSdpZ2tFjy182i1qYBju0o0KyWAPh9chbJvt9GRGvvf98RK8u1GHaclCm8FBEhbA==
Content-Type: application/json
Referer: https://<myclientjira>/secure/enav/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: wb48617274=C9B5D1A8; seraph.rememberme.cookie=24122%3A41d5dae1cd459348abecfb0ca5feee6766fd0ac0; JSESSIONID=1428066D5584823DFD572189A2456540; atlassian.xsrf.token=BSMP-3NDP-M3AB-8R70|98ba98938704a930babccb4a5912c01b762d9220|lin; wb48617274=90986387

您可以在回复中获取 header 详细信息,如下所示。

//get all headers       
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
    System.out.println("Key : " + header.getName() + " ,Value : " + header.getValue());
}

//get header by 'key'
String server = response.getFirstHeader("xxxx").getValue();

我猜你做的是发送一些 Zephyr-related 东西。是的,使用 'usual' Zehpyr API(不是 ZAPI)每次都需要发送 "AO-7DEABF" 这个值。

您可以在登录后通过获取 Jira 的主页来获取 header 值。页面代码将包含如下块:

var zEncKeyFld = \"AO-7DEABF\";\r\n\t\t
var zEncKeyVal = \"QNZa3bygsZ4Jfu+Xw91TcNnRV2yJUj5/Wiu1+l5vowsg/WCjy11kuUACnS/OFIvWuR3NITQFhO46LxZubp/EWw==\";\r\n

然后是解析它的步骤。我不知道这种和平产生的规则,这是我找到的解决方法。