【发布时间】:2017-07-31 23:12:18
【问题描述】:
我正在尝试使用 Java 套接字编程请求 HTTPS 页面。我使用的代码是
PrintWriter s_out = null;
s_out = new PrintWriter(socketData.getOutputStream(), true);
String message = "GET / HTTP/1.1\r\nHost:stackoverflow.com\r\n";
s_out.println(message);
回复是:
HTTP/1.1301MovedPermanentlyLocation:https://stackoverflow.com/X-Request-Guid:b49f01e7-8c3f-4276-b9fe-e325684f0f88Content-Length:143Accept-Ranges:bytesDate:Mon,31Jul201707:15:48GMTVia:1.1varnishConnection:keep-aliveX-Served-By:cache-sin18033-SINX-Cache:MISSX-Cache-Hits:0X-Timer:S1501485348.066340,VS0,VE366Vary:Fastly-SSLX-DNS-Prefetch-Control:offSet-Cookie:prov=929f70a3-e93d-2948-7098-74624f7c4e3c;domain=.stackoverflow.com;expires=Fri,01-Jan-205500:00:00GMT;path=/;HttpOnly<html><head><title>Objectmoved</title></head><body><h2>Objectmovedto<ahref="https://stackoverflow.com/">here</a>.</h2></body></html>
我不知道请求的语法
https://stackoverflow.com 在GET / HTTP/1.1\r\nHost:stackoverflow.com\r\n,
您能否建议调用 https 页面的语法是什么?
谢谢。
【问题讨论】:
-
你有什么理由使用普通的
Socket来完成这项任务吗?有很多用于发出 HTTP 请求的“高级”Java API -
好吧,首先,不确定是否相关,您必须使用 SSL-Socket 而不是普通套接字,因为应该执行其他步骤,这是由 SSL 套接字为您执行的-比如握手、密钥交换……对吧?
-
@Yazan:是的。访问 HTTPS 网址时,您必须使用
SSLSocket并执行 SSL/TLS 握手,然后才能交换任何与 HTTP 相关的数据。