使用Racket连接到HTTPS服务器

使用Racket连接到HTTPS服务器,https,racket,Https,Racket,当我尝试使用Racket的net/http客户端包通过HTTPS连接到Web服务器时,会发生以下情况: 带#t 带的tls 输出(支持的客户端协议) 如何使用http sendrecv连接到HTTPS服务器?使用的tls而不是#t >(需要net/http客户端) >(http sendrecv“google.com”“/”#:ssl?tls) #“找到HTTP/1.1 302” “(#)”位置:https://www.google.dk/?gws_rd=cr&ei=10q1Ve3dMsm4sQ

当我尝试使用Racket的
net/http客户端
包通过HTTPS连接到Web服务器时,会发生以下情况:

#t
的tls
输出
(支持的客户端协议)

如何使用http sendrecv连接到HTTPS服务器?

使用
的tls
而不是
#t

>(需要net/http客户端)
>(http sendrecv“google.com”“/”#:ssl?tls)
#“找到HTTP/1.1 302”
“(#)”位置:https://www.google.dk/?gws_rd=cr&ei=10q1Ve3dMsm4sQGd_KioAQ"
#“缓存控制:专用”
#“内容类型:text/html;字符集=UTF-8”
#“P3P:CP=\”这不是P3P策略!请参阅http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 有关详细信息,请参见“
#日期:2015年7月26日星期日格林尼治标准时间21:02:15
#“服务器:gws”
#“内容长度:259”
#“X-XSS-Protection:1;模式=块”
#“X帧选项:SAMEORIGIN”
#“设置Cookie:PREF=ID=1111111:FF=0:TM=1437944535:LM=1437944535:V=1:S=_FmpeZRsEpdAXW_-;expires=Tue,2017年7月25日21:02:15 GMT;path=/;domain=.google.com”
#“Set Cookie:NID=69=GDETUcLzNFvaXS9uD9fxW_rA-k3ywu9vsb8vvvcbuorbl-BmWjxpj0duYXoNZyH0EHMt54dmVnn3xPJvESfM4tLy_t8dlonb9s6nfcxmbed4qzaaou0ly_l;expires=Mon,2016年1月25日21:02:15 GMT;path=/;domain=.google.com;HttpOnly”
#“连接:关闭”)
#

如果您使用的是Linux,可能会发生这种情况,因为Racket不知道您安装的OpenSSL库的版本。按照@soegaard的建议,通过检查ssl加载失败原因进行确认


一种解决方法是安装OpenSSL开发包(
libssl dev
OpenSSL devel
或类似的东西),其中包括一个无版本的共享库符号链接。

在这种情况下,检查REPL中的
ssl available?
ssl加载失败原因,我忘记安装devel包了。此外,如果我指定了
--enable openssl
,我认为配置脚本在找不到openssl时会出错。Racket在运行时而不是在构建时定位共享库。没有
——启用openssl
选项;configure脚本本应引发错误,但出于某种原因没有引发错误(我已将其报告为一个bug)。是的,似乎我在
--启用openssl
方面弄错了。事实上,
configure
将默默地接受任何假的
--enable-…
标志。然而,我在安装
openssl-devel
后通过重建Racket解决了这个问题,这可能表明外部库接口没有与openssl一起使用。。。我不知道该怎么检查。
➜  code  racket                
Welcome to Racket v6.2.
> (require net/http-client)
> (http-sendrecv "google.com" "/" #:ssl? #t)
ssl-connect: requested protocol not supported
  requested: 'auto
  context...:
   /usr/local/share/racket/collects/openssl/mzssl.rkt:608:0: make-raw-context
   /usr/local/share/racket/collects/openssl/mzssl.rkt:482:18
   /usr/local/share/racket/collects/racket/private/more-scheme.rkt:264:2: call-with-exception-handler
   /usr/local/share/racket/collects/net/http-client.rkt:294:0: http-sendrecv92
   /usr/local/share/racket/collects/racket/private/misc.rkt:87:7
> (require net/http-client)
> (http-sendrecv "google.com" "/" #:ssl? 'tls)
ssl-connect: requested protocol not supported
  requested: 'tls
  context...:
   /usr/local/share/racket/collects/openssl/mzssl.rkt:608:0: make-raw-context
   /usr/local/share/racket/collects/openssl/mzssl.rkt:482:18
   /usr/local/share/racket/collects/racket/private/more-scheme.rkt:264:2: call-with-exception-handler
   /usr/local/share/racket/collects/net/http-client.rkt:294:0: http-sendrecv92
   /usr/local/share/racket/collects/racket/private/misc.rkt:87:7
> (require openssl)
> (supported-client-protocols)
'()
> (require net/http-client)
> (http-sendrecv "google.com" "/" #:ssl? 'tls)
#"HTTP/1.1 302 Found"
'(#"Location: https://www.google.dk/?gws_rd=cr&ei=10q1Ve3dMsm4sQGd_KioAQ"
  #"Cache-Control: private"
  #"Content-Type: text/html; charset=UTF-8"
  #"P3P: CP=\"This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info.\""
  #"Date: Sun, 26 Jul 2015 21:02:15 GMT"
  #"Server: gws"
  #"Content-Length: 259"
  #"X-XSS-Protection: 1; mode=block"
  #"X-Frame-Options: SAMEORIGIN"
  #"Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1437944535:LM=1437944535:V=1:S=_FmpeZRsEpdAXW_-; expires=Tue, 25-Jul-2017 21:02:15 GMT; path=/; domain=.google.com"
  #"Set-Cookie: NID=69=GDETUcLzNFvaXS9uD9fxW_rA-k3ywu9vsb8VVCBUUOrbL-BmWjxpj0duYXoNZyH0EHMt54dmVnn3xPJvESfM4tLy_T8DYCsas_9dloNB9s6NfcxmbeD4DQzAAou0ly_l; expires=Mon, 25-Jan-2016 21:02:15 GMT; path=/; domain=.google.com; HttpOnly"
  #"Connection: close")
#<input-port:pipe>