我正在尝试将此代码段从PHP转换为Python(编程新手),并且我发现这样做有困难:

我试图转换的PHP如下:

$fp = fsockopen($whmcsurl, 80, $errno, $errstr, 5);

if ($fp) {

$querystring = "";

foreach ($postfields AS $k=>$v) {

$querystring .= "$k=".urlencode($v)."&";

}

$header="POST ".$whmcsurl."modules/servers/licensing/verify.php HTTP/1.0\r\n";

$header.="Host: ".$whmcsurl."\r\n";

$header.="Content-type: application/x-www-form-urlencoded\r\n";

$header.="Content-length: ".@strlen($querystring)."\r\n";

$header.="Connection: close\r\n\r\n";

$header.=$querystring;

$data="";

@stream_set_timeout($fp, 20);

@fputs($fp, $header);

$status = @socket_get_status($fp);

while (!@feof($fp)&&$status) {

$data .= @fgets($fp, 1024);

$status = @socket_get_status($fp);

}

@fclose ($fp);

}

我编写的相应Python代码如下:

fp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

fp.connect(("my ip", 80))

if (fp):

querystring = ""

#print postfields

for key in postfields:

querystring = querystring+key+"="+urllib.quote(str(postfields[key]))+"&"

header = "POST "+whmcsurl+"modules/servers/licensing/verify.php HTTP/1.0\r\n"

header+="Content-type: application/x-www-form-urlencoded\r\n"

header+="Content-length: "+str(len(querystring))+"\r\n"

header+="Connection: close\r\n\r\n"

#header+=querystring

data=""

request = urllib2.Request(whmcsurl,querystring,header)

response = urllib2.urlopen(request)

data = response.read()

在这里,我遇到以下错误:

request = urllib2.Request(whmcsurl,querystring,header)

File "/usr/lib64/python2.6/urllib2.py", line 200, in __init__

for key, value in headers.items():

AttributeError: 'str' object has no attribute 'items'

所以我猜测Python期待标题的字典.但PHP将其作为字符串发送.

我可以知道如何解决这个问题吗?

提前致谢

解决方法:

你太过复杂了,相当远. Python会为您处理大部分内容.您无需自己打开套接字,也无需构建标头和HTTP开头行.

from urllib import urlencode

from urllib2 import urlopen

params = urlencode(postfields)

url = whmcsurl + 'modules/servers/licensing/verify.php'

response = urlopen(url, params)

data = response.read()

urlopen()接受第二个参数,即要在POST请求中发送的数据;该库负责计算主体的长度,并设置适当的标题.最重要的是,它使用另一个库httplib来处理套接字连接并生成有效的头和HTTP请求行.

POST主体使用urllib.urlencode()进行编码,它也会为您正确引用.

您可能还想查看external requests library,它仍然提供了一个更易于使用的API:

import requests

response = requests.post(whmcsurl + 'modules/servers/licensing/verify.php', params=params)

data = response.content # or response.text for decoded content, or response.json(), etc.

标签:python,php,porting,http-headers

来源: https://codeday.me/bug/20190723/1508961.html

python post提交给php,从Python发送HTTP POST请求(尝试从PHP转换)相关推荐

  1. 【Python笔记_2】使用urllib库发送付费代理请求方式

    import urllib.request# 需求点如下: # 付费的代理发送 # 有用户密码的情况 # 通过验证的处理器来发送def money_proxy_use():# 第一种方式付费代理方式发 ...

  2. 解决python发送multipart/form-data请求上传文件的问题

    解决python发送multipart/form-data请求上传文件的问题 参考文章: (1)解决python发送multipart/form-data请求上传文件的问题 (2)https://ww ...

  3. python requests form data_python使用requests发送multipart/form-data请求数据

    def client_post_mutipart_formdata_requests(request_url,requestdict): #功能说明:发送以多部分表单数据格式(它要求post的消息体分 ...

  4. python web应用_如何使用Python将通知发送到Web应用

    python web应用 by Lucas Hild 卢卡斯·希尔德(Lucas Hild) 如何使用Python将通知发送到Web应用 (How to send notifications to y ...

  5. python发送HTTP POST请求

    1. 127.0.0.1和0.0.0.0 127.0.0.1是一个回送地址,指本地机,一般用来本机测试使用,使用127.0.0.1启的服务只能在本地机器上访问,使用0.0.0.0启的服务可以在其他机器 ...

  6. python发微信提醒天气_基于Python实现定时自动给微信好友发送天气预报

    效果图 from wxpyimport * import requests from datetimeimport datetime import time from apscheduler.sche ...

  7. [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱

    本文改自 [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱 之前写的爬虫单子,代码已经跑了快3个月了,后续又增加了一些需求,修改了一些小bug ...

  8. Python实现在远端服务器挂代码—发送定时天气预报至邮箱+每日一句(小白教程)

    Python实现在远端服务器挂代码-发送定时天气预报至邮箱+每日一句(小白教程) 人生苦短,我用python.下面来讲解一个python每天定时发送天气预报和每日一句至指定邮箱的脚本挂在服务器运行的程 ...

  9. Python网络编程:使用requests.post发送POST请求

    Python网络编程:使用requests.post发送POST请求 在Python中,requests是一个强大的库,它可以用于发送HTTP请求并且处理响应.requests.post()函数是这个 ...

最新文章

  1. SQL学习之计算字段的用法与解析
  2. 使用Scala-IDE构建Maven项目
  3. 使用js冒泡实现点击空白处关闭弹窗
  4. struts2.0实现文件上传
  5. java窗口坐标_如何在Java中获取窗口外部的鼠标单击坐标
  6. 数据结构常见算法原理讲解100篇(一)-递归和分治算法原理及案例应用
  7. 部署好网站,同局域网中电脑无法访问的问题的解决方案
  8. ReflectionPad2d--利用输入边界的反射来填充输入张量
  9. tcpdump工具编译记录
  10. PHP之路——Xdebug扩展
  11. 基于RV1126平台imx291分析 --- imx291注册
  12. JavaScript表单验证
  13. 【ctf-3】数论基础+Crypto初步
  14. 线程Signaled nonsignaled状态的意思
  15. 小程序 : js获取今日日期、加日期、减日期; 判断今日 、判断昨日
  16. 大脑状态的重构与认知行为之间的映射
  17. 【卷积神经网络】CNN详解以及猫狗识别实例
  18. Latex-加通讯作者的小信封标记
  19. linux执行一个可执行文件,不同Linux系统下同一个可执行文件执行有关问题
  20. 自己写的团购网注水程序(仅供参考)来自:机敏的山猫

热门文章

  1. 【思科百难】RIP两个版本之间能够相互通信?
  2. 2013年新年礼物---CrossFPC 终于出来了
  3. 程序员的算法课(7)-01背包问题
  4. linux释放系统内存,系统运维
  5. ArcEngine中多边形内外环的处理(转)
  6. 危机时刻,我们需要多少个“冷锋”?
  7. 【LeetCode】Copy List with Random Pointer
  8. django之Form表单
  9. ISE MAP报错: Unsupported programming for BSCAN block and JTAG_CHAIN attribute value 1的解决方法...
  10. 从武侠门派的角度去解释域、域树、林的含义(下)