我正在使用pycURL库在Python 2.7中编写一个简单的程序,以便将文件内容提交给pastebin。 这是该计划的代码:
#!/usr/bin/env python2
import pycurl, os
def send(file):
print "Sending file to pastebin...."
curl = pycurl.Curl()
curl.setopt(pycurl.URL, "http://pastebin.com/api_public.php")
curl.setopt(pycurl.POST, True)
curl.setopt(pycurl.POSTFIELDS, "paste_code=%s" % file)
curl.setopt(pycurl.NOPROGRESS, True)
curl.perform()
def main():
content = raw_input("Provide the FULL path to the file: ")
open = file(content, 'r')
send(open.readlines())
return 0
main()
输出pastebin看起来像标准的Python列表:['string\n', 'line of text\n', ...]
等。
有没有什么方法可以让它格式化,所以看起来更好,它实际上是人类可读的?另外,如果有人能告诉我如何在POSTFIELDS
中使用多个数据输入,我会很高兴。 Pastebin API使用paste_code
作为主要数据输入,但它可以使用paste_name
等可选内容来设置上传名称或paste_private
将其设置为私有。
答案 0 :(得分:3)
首先,使用.read()
作为virhilo
表示。
另一步是使用urllib.urlencode()
来获取字符串:
curl.setopt(pycurl.POSTFIELDS, urllib.urlencode({"paste_code": file}))
这也允许您发布更多字段:
curl.setopt(pycurl.POSTFIELDS, urllib.urlencode({"paste_code": file, "paste_name": name}))
答案 1 :(得分:1)
import pycurl, os
def send(file_contents, name):
print "Sending file to pastebin...."
curl = pycurl.Curl()
curl.setopt(pycurl.URL, "http://pastebin.com/api_public.php")
curl.setopt(pycurl.POST, True)
curl.setopt(pycurl.POSTFIELDS, "paste_code=%s&paste_name=%s" \
% (file_contents, name))
curl.setopt(pycurl.NOPROGRESS, True)
curl.perform()
if __name__ == "__main__":
content = raw_input("Provide the FULL path to the file: ")
with open(content, 'r') as f:
send(f.read(), "yournamehere")
print
在阅读文件时,请使用with
语句(如果出现问题,这可确保您的文件正常关闭)。
没有必要拥有main
函数然后调用它。使用if __name__ == "__main__"
构造使脚本在调用时自动运行(除非将其作为模块导入)。
要发布多个值,您可以手动构建网址:只需使用&符号(&
)分隔不同的键值对。像这样:key1=value1&key2=value2
。或者您可以使用urllib.urlencode
构建一个(与其他人建议的那样)。
编辑:对要发布的字符串使用urllib.urlencode
可确保在源字符串包含一些有趣/保留/异常字符时正确编码内容。
答案 2 :(得分:0)
使用.read()而不是.readlines()
答案 3 :(得分:0)
POSTFIELDS
的发送方式与发送查询字符串参数的方式相同。因此,首先,您需要encode发送到paste_code
的字符串,然后使用&
添加更多POST参数。
示例:
paste_code=hello%20world&paste_name=test
祝你好运!