浏览器实现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
    评论
好的,我来给你提供一个简单的实现思路。 首先,我们需要使用Spring Boot创建一个Web应用程序。可以使用Spring Initializr来生成一个基本的Spring Boot项目。 然后,我们需要添加一些依赖,以支持RESTful API的开发。常用的依赖有: - Spring Web (用于处理HTTP请求和响应) - Spring Data JPA (用于数据库操作) - H2 Database (用于内存数据库) 接下来,我们需要定义一个实体类,用于映射数据库中的表。例如,我们可以定义一个名为“Message”的实体类,其中包含id、title和content属性。 然后,我们需要编写一个控制器类,用于处理RESTful API的请求。例如,我们可以定义一个名为“MessageController”的控制器类,其中包含以下方法: - GET /messages:返回所有消息列表 - GET /messages/{id}:返回指定id的消息 - POST /messages:创建一条新消息 - PUT /messages/{id}:更新指定id的消息 - DELETE /messages/{id}:删除指定id的消息 在这些方法中,我们需要使用Spring框架提供的注解来指定路由路径、请求方法、请求体和响应内容。 最后,我们需要编写一个启动类,用于启动Web服务器。例如,我们可以定义一个名为“Application”的启动类,其中使用Spring框架提供的注解@SpringBootApplication来启动应用程序。 在这个启动类中,我们可以配置一些应用程序的属性,例如端口号、数据源和数据库初始化脚本。 这样,一个简单的支持RESTful API的Web应用服务器就完成了。在浏览器中发送请求,服务器将返回JSON格式的响应数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值