获取请求的自定义 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
然后是解析它的步骤。我不知道这种和平产生的规则,这是我找到的解决方法。
我正在尝试通过 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
然后是解析它的步骤。我不知道这种和平产生的规则,这是我找到的解决方法。