为什么代码获取不到API返回的数据?
import random,requests,jsonip = [ "49.104.25.257", "39.115.131.116"]api = "http://ip-api.com/batch?fields=58898?lang=zh_CN"headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", "content-type":"application/json" }ip = json.dumps(ip,ensure_ascii=False, indent=2)print(ip)resp = requests.post(url=api,data=ip,headers=headers)print(resp.status_code)print(resp.text)resp.close()
API是免费版本, 每分钟限制45次请求,使用POST请求方式, URL中的fields=58898是返回指定字段.
我在API的网站查询IP没有问题, 但是代码中一直返回空值, requests也没有报错, 所以现在有点不知道从哪里下手了, 请大佬们帮我分析一下, 或者给点思路! 跪谢!
import randomimport requestsimport jsonip = [ "49.104.25.257", "39.115.131.116"]api = "http://ip-api.com/batch?fields=58898&lang=zh_CN"headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", "content-type": "application/json"}ip = json.dumps(ip, ensure_ascii=False, indent=2)print(ip)resp = requests.post(url=api, data=ip, headers=headers)print(resp.status_code)print(resp.text)resp.close()
从你提供的代码和信息来看,问题可能出在以下几个地方:
requests.post
方法来发送GET请求。你应该使用requests.post
来发送POST请求。content-type
应该设置为"application/json"
,并且应该包含一个"Accept-Encoding"
头,因为POST请求默认会接受压缩的响应。修改后的代码如下:
import randomimport requestsip = [ "49.104.25.257", "39.115.131.116"]api = "http://ip-api.com/batch?fields=58898&lang=zh_CN"headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", "content-type":"application/json", "Accept-Encoding": "gzip, deflate"}# IP列表转为字符串格式ip = ','.join(ip)print(ip)# 使用POST请求方式resp = requests.post(url=api, data=ip, headers=headers)print(resp.status_code)print(resp.text)resp.close()
请尝试运行修改后的代码,看看是否可以正常获取API返回的数据。如果问题仍然存在,那可能是API的限制或者IP的问题。你可以尝试增加延迟或者使用代理IP来避免API的限制。
PHP手册说,如果锁定成功,调用flock将返回TRUE,否则返回FALSE。若文件被其他进程阻塞,那个么flock应该等到它被解锁(因为我们不使用LOCK_NB)。文档中没有超时,超时会中断等待,所以显然flock将无限等待,直到获得锁为止。 但是有时我在我的多线程脚本中从flock()得到FALSE。那是什么原因呢?
(免责声明:人们通过facebook、firebase等请求询问使用异步操作时数据为空/不正确时,会产生很多问题。我提出这个问题的目的是为每个从android异步操作开始的人提供一个简单的答案。) 我试图从我的一个操作中获取数据,当我使用断点或日志调试它时,值就在那里,但当我运行它时,它们总是空的,我该如何解决这个问题呢? 火力基地 脸书 等。
当然在文件结束或输入错误发生时返回,但这是否意味着没有更多的数据可用? 使用
问题内容: 当我尝试运行程序时,出现以下错误 请帮忙 问题答案: 从Javadoc: 如果Java虚拟机找不到声明为native的方法的适当本机语言定义,则抛出该异常。 这是与JNI相关的错误。loadJacobLibrary试图加载名为jacob-1.14.3-x86的本机库,但在java.library.path定义的路径上找不到该库。启动JVM时,应将此路径定义为系统属性。例如 在Windo
在这里抛出RejectedExecutionException是否有其他原因? java.util.concurrent.RejectedExecutionException:任务java.util.concurrent.FutureTask@4194a5f0被java.util.concurrent.ThreadPoolExecutor@41a36e90拒绝[终止,池大小=0,活动线程=0,排队
问题内容: 我在运行我的应用程序时遇到了此类错误。它偶尔会发生,所以我不知道此错误产生于我的代码中的确切原因。该异常不会告诉任何明确的细节。 一段堆栈跟踪。 请问有人帮助过这个错误吗?我正在使用jboss 6,seam 2,jsf 2和richfaces 3。 问题答案: 在JBoss Wiki中 对此进行了回答。这里是相关的: 许多持久性框架(Hibernate2 / OBJ)“随机”打开和关闭