【问题标题】:Python - Building a HTTP request string variablePython - 构建 HTTP 请求字符串变量
【发布时间】:2013-04-21 21:37:43
【问题描述】:

我正在尝试在变量“full_req”中构建 HTTP 请求字符串。以下是 HTTP 请求的外观:

GET /images/logo/ HTTP/1.1
Host: www.google.com
Connection: close

我已经编写了 python 代码,所以如果我输入一个 url,“http://www.google.com/images/logo/googlelogo.png”,它会将 url 分成 3 部分。以下是我使用的变量:

  • host(包含www.google.com
  • path(包含/images/logo/
  • file(包含googlelogo.png
  • port(它显示None,但我认为它应该是80

如何将 HTTP 请求字符串分配给 full_req 变量,以便在打印此变量时,它包含所有三行?

print(full_req)

尝试了字符串连接,但没有成功。我使用了这个资源:http://www.skymind.com/~ocrow/python_string/

【问题讨论】:

标签: python


【解决方案1】:

您可以使用字符串格式:

request = 'GET {path} HTTP 1.1\r\nHost: {host}\r\nConnection: Close\r\n\r\n'.format(path=path, host=host)

这使用现代的str.format() method,但您也可以使用classic string operations

【讨论】:

    【解决方案2】:

    。 .字符串格式或简单的连接应该可以。

    。 .有很多选择,这取决于版本。在 Python2 中使用% operator syntax 很常见,但在 Python3 中您主要使用.format method on string objects

    。 .您仍然可以将最简单的连接形式与 + 运算符一起使用,如下所示:

    full_req = 'GET ' + path + ' HTTP/1.1\r\n' \
               'HOST: ' + host + '\r\n' + \
               'Connection: close'
    

    。 .请注意,它不会请求文件(根据您的示例,您请求的是父文件夹,而不是文件本身),如果您打算下载文件而不是仅仅尝试 HTTP 协议,则可以使用内置模块那个(检查urllib.retrieve)。

    。 .打开连接(在套接字中)时将使用端口号(对于 HTTP,通常为 80),但您的示例似乎也没有执行请求的那部分。

    。 Amplexos。

    【讨论】:

    • 请注意,字符串连接比字符串格式化更麻烦。否则,好点。
    • 我实际上是在尝试在屏幕上显示图像。为什么我需要保存文件?
    • 您不必将文件保存到磁盘;命名的库仍然可以帮助您实现您想要的。
    【解决方案3】:

    试试:

    def request(host, path, file):
        return '''GET %s%s HTTP/1.1\r
    Host: %s\r
    Connection: close''' % (path, file, host)
    

    据我所知,该端口并未包含在实际的 HTTP 请求中。这里的关键是%string formatting operator的使用。

    【讨论】:

    • 很高兴你的文件可以使用“\n”-only(linux风格)换行符,但是RFC2616 defines the "right" line break as "\r\n",所以最好手动设置换行符。跨度>
    • @DiegoNunes:谢谢你的链接,我真的不知道!我会修改答案。
    • 它没有将 HTTP 请求存储在变量中
    • 要将结果存储在变量中,请在定义函数后使用req = request(host, path, file)。或者,只写req = '''GET %s%s HTTP/1.1\r等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多