python - 如何修复返回 TypeError 的 Python 代码:'str' object is not callable?
问题描述
我一直在尝试使用(第一次使用它)发送一个POST
HTTP 请求,它一直返回一个Python
TypeError: 'str' object is not callable
我的代码:
import requests
import json
c100 = "100";
url ="http://api.orange.com/smsmessaging/v1/outbound/tel+21654614211/requests"
payload = {
"outboundSMSMessageRequest": {
"address": "tel+21653424499",
"outboundSMSTextMessage": {
"message": "Capteur "+ c100 +" est en incendie"
},
"senderAddress": "tel+21654614211",
"senderName": "GCI"
}
}
headers = {'content-type': 'application/json'}
r = requests.post(url, auth=('Basic <omitted>'), data=json.dumps(payload), headers=headers)
输出:
Traceback (most recent call last):
File "main.py", line 18, in <module>
r = requests.post(url, auth=('Basic U0cwUE1aeGZmZ0JLbUkzWUV2ZWlsM0xBdEt0UVZ4Q1k6SVRqWXQxRU5nWlV4SGM5OQ=='), data=payload, headers=headers)
File "/usr/lib/python3/dist-packages/requests/api.py", line 88, in post
return request('post', url, data=data, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 433, in request
prep = self.prepare_request(req)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 371, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/usr/lib/python3/dist-packages/requests/models.py", line 291, in prepare
self.prepare_auth(auth, url)
File "/usr/lib/python3/dist-packages/requests/models.py", line 470, in prepare_auth
r = auth(self)
TypeError: 'str' object is not callable
解决方案
您的身份验证是错误的,而且问题是:您是否需要身份验证?
基本身份验证许多需要身份验证的 Web 服务都接受 HTTP 基本身份验证。这是最简单的一种,Requests 直接支持它。
使用 HTTP Basic Auth 发出请求非常简单:
>>> from requests.auth import HTTPBasicAuth >>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass')) <Response [200]>
事实上,HTTP Basic Auth 是如此普遍,以至于 Requests 提供了一个方便的简写方式来使用它:
>>> requests.get('https://api.github.com/user', auth=('user', 'pass')) <Response [200]>
在这样的元组中提供凭据与上面的 HTTPBasicAuth 示例完全相同。
笔记:
如果你有令牌,你可能需要类似的东西:
import requests
auth_token='sdasadadsadas'
head = {'Authorization': 'Bearer ' + auth_token}
payload = {
"outboundSMSMessageRequest": {
"address": "tel+21653424499",
"outboundSMSTextMessage": {
"message": "Capteur "+ c100 +" est en incendie"
},
"senderAddress": "tel+21654614211",
"senderName": "GCI"
}
}
url = 'http://api.orange.com/smsmessaging/v1/outbound/tel+21654614211/requests'
response = requests.post(url, json = payload, headers=head)
推荐阅读
- uwp - UWP App 中的 IdentityModel.OidcClient 从 3.1.2 迁移到 4.0
- typo3-10.x - TYPO3 Gridelements 10 - Gridelement Link Wizard Flexform
- neo4j - 获取neo4j中最重要的节点
- python-3.x - 如何使 python functools.lru_cache 返回值不可变?
- javascript - Nuxt JS / Vue Jest 检查页面上是否存在类名元素
- node.js - 如何使用 NodeJS 和 ESC/POS 在蓝牙(票务)打印机上打印
- c++ - 是否可以使用联合成员作为对象存储?
- helmet.js - 头盔js中的内容安全策略
- java - 我可以使用spring boot和MySQL设置过期时间吗?
- html - 如何检查html中的空字符串