file-type

Python requests包:params与data参数详解及其区别

版权申诉
181KB | 更新于2024-09-11 | 166 浏览量 | 13 下载量 举报 收藏
download 限时特惠:#9.90
在Python的requests库中,request()函数是核心组件,用于发起HTTP请求。其中,params和data两个参数在发送数据时扮演了不同的角色,理解它们的区别对于正确地进行API调用至关重要。 1. params参数: - 使用场景:params主要用来传递查询参数,这些数据会附加到URL的末尾,以"?"字符与URL分开,并通过"&"符号连接键值对。当你需要发送GET请求并带有查询条件时,应使用params。例如,在搜索请求中,可能包含关键词参数wd,如"http://www.baidu.com/s?wd=你好",就是params参数的应用。 2. data参数: - 使用场景:data则是发送POST、PUT等请求时使用的,它通常包含请求体的数据,即非查询字符串形式的数据。数据可以是字典、字节或文件对象。比如,当你需要提交表单数据或者JSON数据时,data参数会被编码(如json.dumps()处理后)成合适的格式发送。对于支持JSON的API,data = {"key1": "value1", "key2": "value2"} 就是正确的使用方式。 总结来说,params与data的区别在于它们如何与URL交互以及数据类型。params适用于GET请求和包含查询参数的情况,而data则适用于POST、PUT等请求,特别是那些需要发送结构化数据或文件的情况。在使用requests.request()时,根据实际需求选择合适的方法和参数,能够确保请求的成功和数据的正确传输。务必记住,get方法只允许使用params发送查询字符串,而post方法则可以同时使用params和data,但data优先级更高,会覆盖params中的相同键值。

相关推荐

filetype

Traceback (most recent call last): File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connection.py", line 198, in _new_conn sock = connection.create_connection( (self._dns_host, self.port), ...<2 lines>... socket_options=self.socket_options, ) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\util\connection.py", line 60, in create_connection for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\socket.py", line 977, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ socket.gaierror: [Errno 11001] getaddrinfo failed The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen response = self._make_request( conn, ...<10 lines>... **response_kw, ) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connectionpool.py", line 488, in _make_request raise new_e File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connectionpool.py", line 464, in _make_request self._validate_conn(conn) ~~~~~~~~~~~~~~~~~~~^^^^^^ File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connectionpool.py", line 1093, in _validate_conn conn.connect() ~~~~~~~~~~~~^^ File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connection.py", line 704, in connect self.sock = sock = self._new_conn() ~~~~~~~~~~~~~~^^ File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connection.py", line 205, in _new_conn raise NameResolutionError(self.host, self, e) from e urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x000001D8B31C2E40>: Failed to resolve 'api.example.com' ([Errno 11001] getaddrinfo failed) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\requests\adapters.py", line 667, in send resp = conn.urlopen( method=request.method, ...<9 lines>... chunked=chunked, ) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen retries = retries.increment( method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2] ) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\urllib3\util\retry.py", line 519, in increment raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.example.com', port=443): Max retries exceeded with url: /jd/phones?page=1&size=50 (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x000001D8B31C2E40>: Failed to resolve 'api.example.com' ([Errno 11001] getaddrinfo failed)")) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\python学习\pythonProject7\main.py", line 61, in <module> phone_data = fetch_jd_phone_data() File "D:\python学习\pythonProject7\main.py", line 17, in fetch_jd_phone_data response = requests.get(url, headers=headers, params=params) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\requests\api.py", line 73, in get return request("get", url, params=params, **kwargs) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\requests\api.py", line 59, in request return session.request(method=method, url=url, **kwargs) ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\requests\sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\requests\sessions.py", line 703, in send r = adapter.send(request, **kwargs) File "C:\Users\密码\AppData\Local\Programs\Python\Python313\Lib\site-packages\requests\adapters.py", line 700, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.example.com', port=443): Max retries exceeded with url: /jd/phones?page=1&size=50 (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x000001D8B31C2E40>: Failed to resolve 'api.example.com' ([Errno 11001] getaddrinfo failed)")) 进程已结束,退出代码为 1

weixin_38500572
  • 粉丝: 6
上传资源 快速赚钱