通过python自动生成curl的调用命令

Posted 大象无形,大音希声

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过python自动生成curl的调用命令相关的知识,希望对你有一定的参考价值。

一、前言

有的时候我们需要在Linux里面执行Curl命令,但是Curl命令里面牵涉到单引号或者双引号,转移字符,有的时候可能差之毫厘谬以千里,这个时候,有没有什么好的方法能够自动生成curl命令的呢?

二、方法1

通过下面的Python进行调用。

import requests
api_url="http://www.baidu.com"
response = requests.get(api_url)
print(response.content)

那么如何知道其的request参数是什么了?这个时候,就需要用到一个第三方库,curlify

代码如下:

import requests
import curlify
api_url="http://www.baidu.com"
response = requests.get(api_url)
#print(response.content)
print(curlify.to_curl(response.request))

其返回值如下:

PS E:\\01-IT-Technology> & C:/Users/35490/AppData/Local/Microsoft/WindowsApps/python3.10.exe e:/01-IT-Technology/05-PWC/11.python/httpInvoke.py
curl -X GET -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'User-Agent: python-requests/2.28.1' http://www.baidu.com/

三、方法2

另外一种方法,可以使用requests_toolbelt.utils

import requests
from requests_toolbelt.utils import dump

api_url="http://www.baidu.com"

response = requests.get(api_url)
data = dump.dump_all(response)
print(data.decode('utf-8'))

其返回值如下:

PS E:\\01-IT-Technology> & C:/Users/35490/AppData/Local/Microsoft/WindowsApps/python3.10.exe e:/01-IT-Technology/05-PWC/11.python/httpInvoke.py
< GET http://www.baidu.com/ HTTP/1.1
< Host: www.baidu.com
< User-Agent: python-requests/2.28.1
< Accept-Encoding: gzip, deflate
< Accept: */*
< Connection: keep-alive
<

> HTTP/1.1 200 OK
> Connection: close
> Transfer-Encoding: chunked
> Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
> Content-Encoding: gzip
> Content-Type: text/html
> Date: Sat, 24 Dec 2022 12:01:59 GMT
> Last-Modified: Mon, 23 Jan 2017 13:27:57 GMT
> Pragma: no-cache
> Server: bfe/1.0.8.18
> Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
>
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden 
name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com> 
关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

四、总结

通过上面的两种方法,可以完美的打印出curl命令需要的参数。

以上是关于通过python自动生成curl的调用命令的主要内容,如果未能解决你的问题,请参考以下文章

通过python自动生成curl的调用命令

使用CURL上传文件

通过命令调用jenkins

通过 curl 调用 PayPal API 生成 81002 错误

通过执行本机操作系统的命令(如 curl)通过 MySQL 调用 HTTP GET 请求

更新curl,导致yum无法使用