首先感谢您的阅读!
是的,我已经试着找到答案了!:)也许我没有找到它,因为我没有用正确的词来描述我的问题,但我已经花了大约4个小时的时间试图弄清楚它,我有点疯狂地试图自己把它拼凑起来。
我对编程很陌生。Python是我的第一语言。我正在上我的第三门Python课程。我有一个任务是使用套接字库(而不是urllib库——我知道如何做到这一点)来制作套接字,并使用GET来接收信息。问题是程序需要为有问题的URL获取原始输入。
我拥有我想要的其他一切,但我需要知道应该在我的"GET"请求内部使用的语法,以便HTTP消息包括请求的文档路径。
我试过(显然不是所有的一起哈哈):
mysock.send('GET (url) HTTP/1.0nn')
mysock.send( ('GET (url) HTTP:/1.0nn'))
mysock.send(('GET (url) HTTP:/1.0nn'))
mysock.send("GET (url) HTTP/1.0nn")
mysock.send( ("'GET' (url) HTTP:/1.0nn"))
mysock.send(("'GET' (url) 'HTTP:/1.0nn'"))
和:
基本上上述(,(,((,',')组合的所有其他配置。
我也试过:
-首先使用"url"变量创建一个字符串,然后将其包含在mysock.send(string)中-再次使用"字符串优先"理论,但这次我使用%r来引用我的用户输入(所以基本上是"GET%r HTTP/1.0\n\n'%url")
我读过这里的问题,其他编程网站,书中的整个章节和整个在线讲座/笔记,我读过关于socket库和.send()的文章,当然还有关于GET请求的文章。。。但我显然错过了什么。似乎大多数人在可以使用urlib的时候都不使用套接字库,我不怪他们!!
再次感谢。。。
大学里有人回复我说,url变量可以与GET语法连接,并分配给一个字符串变量,然后可以用.send(concatenatedvariable)调用该变量-我曾提到过尝试过,但没有注意到GET需要在单词"GET"后面有一个空格,所以连接当然不包括空格,这就搞砸了。如果其他人想知道:)
仅供参考:只有在HTTP/1.1请求中才允许使用完全限定的URL。不过,这并不是常态,因为HTTP/1.1需要设置Host
标头。相关的阅读内容应该是RFC 7230,第3.1.1节,可能还有RFC 3986。参数的语法在很大程度上借鉴了CGI格式。然而,它并没有被强制执行。简而言之,所有放在一起的东西在电线上都是这样的:
GET /path?param1=value1¶m2=value2 HTTP/1.1
Host: example.com
最后注意:HTTP中的行分隔符是CRLF(rn
)。为了健壮性,简单的换行也是可以接受的,但不推荐使用。