Java JSOUP如何在头文件中发送Origin

时间:2018-03-15 18:57:12

标签: java http cors jsoup

我试图使用JSOUP测试我的服务,但我使用CORS,我需要发送 仅适用于测试用户的来源,但是当我发送此消息时,我不会在服务器端收到该消息,但始终会收到空。

Connection con = Jsoup.connect("http://localhost:8080/myservice");
 con.userAgent("Mozilla");
 /* the origin is replaced to null automatically*/
 con.header("Origin", origin);
 con.ignoreHttpErrors(true);
 con.followRedirects(true);
 con.ignoreContentType(true);
 con.post();

我会做些不同的事情吗?

解决:

使用ApacheHTTP代替JSOUP,导致JSOUP默认删除Origin头。 :)

1 个答案:

答案 0 :(得分:2)

在幕后,JSoup使用java.net.HttpURLConnection建立连接。 HttpURLConnection有一组受限标题,包括“Origin”。这些似乎没有得到很好的记录,但可以在source中清楚地看到。

正如你所提到的,使用HttpClient会解决问题。

或者,要继续使用JSoup的直接连接,根据您的环境中发生的其他情况,可以选择设置sun.net.http.allowRestrictedHeaders系统属性。这可以从上面链接的来源中进一步看出。

这将绕过HttpURLConnection中的标头检查,但令人烦恼的是它被编码为共享静态值。这意味着需要在JVM中的任何位置进行第一次连接之前设置系统属性 - 例如作为-D命令行选项。

有关此主题的更多信息over here

稍微讨论一下,HttpURLConnection来源中的评论,将那里的受限标题与XMLHttpRequest2进行比较很有意思 - 好像预计会在浏览器中运行一样。这个限制可以追溯到Java小程序的日子?对于服务器端应用程序来说,现在可能没那么有用了。