朋友们,我有同样的问题 Send GET HTTPS request but get 403 forbidden response, why?
我的urlstring也包含https://..
,但我无法理解布鲁诺的答案。
当您发送HTTP GET请求时 应该是这样的:GET / COVIWeb / gate / ... HTTP / 1.1主机: ekp.truefriend.com不:GET https://ekp.truefriend.com/COVIWeb/gate/ ... HTTP / 1.1(仅适用于请求通过 代理,并不适用于 无论如何都是HTTPS请求。)
更新
我仍然没有取得任何成功:
java.lang.IllegalStateException:目标主机不能为空,或者在参数中设置。
我的绝对:
我的代码:
String url = "/platform/j_spring_cas_security_check?ticket=ST-14-J76iOk5aXQNrZBBUeIn3-cas";
HttpGet request = new HttpGet(url);
request.setHeader("Accept", "*/*");
request.setHeader("User-Agent", USER_AGENT);
request.setHeader("connection","keep-alive");
request.setHeader("Host","Host:www.stage.ceosace.com"+":443");
我不知道我错在哪里;有什么建议吗?
答案 0 :(得分:0)
布鲁诺的回答说,包含主机名的URL形式很尴尬,也许有问题;主机名必须包含在Host:
标头中。在完整URI中包含主机名是重复信息,并且可能有害(即使RFC规定HTTP 1.1服务器应该准备接受URI中的完整主机名)。
RFC 2616 Section 5.1.2有详细信息:
The absoluteURI form is REQUIRED when the request is being made to a
proxy. The proxy is requested to forward the request or service it
from a valid cache, and return the response. Note that the proxy MAY
forward the request on to another proxy or directly to the server
specified by the absoluteURI. In order to avoid request loops, a
proxy MUST be able to recognize all of its server names, including
any aliases, local variations, and the numeric IP address. An example
Request-Line would be:
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
To allow for transition to absoluteURIs in all requests in future
versions of HTTP, all HTTP/1.1 servers MUST accept the absoluteURI
form in requests, even though HTTP/1.1 clients will only generate
them in requests to proxies.
The authority form is only used by the CONNECT method (section 9.9).
The most common form of Request-URI is that used to identify a
resource on an origin server or gateway. In this case the absolute
path of the URI MUST be transmitted (see section 3.2.1, abs_path) as
the Request-URI, and the network location of the URI (authority) MUST
be transmitted in a Host header field. For example, a client wishing
to retrieve the resource above directly from the origin server would
create a TCP connection to port 80 of the host "www.w3.org" and send
the lines:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
followed by the remainder of the Request. Note that the absolute path
cannot be empty; if none is present in the original URI, it MUST be
given as "/" (the server root).