浏览器实现restful接口的post请求

某客户的部署环境只有内网,但需要访问外网的第三方API,有台可以访问公网的机器搭了apache代理,代理添加了域名白名单,之前写的用requests直接访问失败,应该是requests用的是http1.0协议,而apache白名单过滤用的是http1.1协议。

浏览器默认是http1.1协议,可以通过模拟浏览器发起请求

方法一:使用seleniumrequests实现

from seleniumrequests import Chrome

def test_post(url):
    headers = {"Content-Type": "application/json"}
    data = {"registered_name": "9183934"}
    webdriver = Chrome()
    result = webdriver.request("POST", url, data=json.dumps(data), headers=headers).json()
    print(result)
    webdriver.quit()

方法二:通过js的ajax发起

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--no-sandbox")
options.add_argument("--disable-infobars")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-browser-side-navigation")
options.add_argument("--disable-gpu")
options.add_argument("--disable-web-security")
options.add_argument("--headless")
driver = webdriver.Chrome(chrome_options=options)

jquery = open("js/jquery.min.js", "r").read()
driver.execute_script(jquery)
ajax_query = """
		$.ajax({
			url: '%s',
			headers: {
				'Content-Type':'application/json',
				'Access-Control-Allow-Origin': '*'
			},
			method: 'POST',
			dataType: 'json',
			data: '{"registered_name": "%s"}',
			success: function(data){
				 $("body").html(data.transaction_id);
			}
		});
		""" % (url, registered_name)
ajax_query = ajax_query.replace(" ", "").replace("\n", "")
driver.execute_script(ajax_query)
wait = WebDriverWait(driver, 15)
try:
	wait.until(lambda driver: driver.execute_script('return jQuery.active') == 0)
	wait.until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
except Exception as e:
	log.error("request for purple failed")
	log.error(e)
transaction_id = driver.find_element_by_tag_name("body").text
app.logger.info("transaction_id is: {}".format(transaction_id))
driver.quit()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值