- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们有一个服务器来为我们的 API 提供服务。
我已经使用它一段时间了,现在我正在经历我现在所说的一种从我们的 API 服务器到某些目的地的服务器偏见 (对某些发件人好,对其他发件人不好)我想知道到底发生了什么。
一些请求正在通过 TCP 重置 (RST) 进行响应,但其他请求确实得到正确响应(200 状态,预期内容)。
我想澄清的是,这并不是在服务器中明确完成的(我们实际上并没有选择要拒绝的目的地),而且对于我尝试过的每个客户端,我总是得到相同的结果(我的意思是,行为是确定性的,仅取决于发件人 - 至少表面上如此)。
这是我发送的实际请求:
GET /api/guilherme@buddycloud.org/metadata/posts HTTP/1.1
Host: demo.buddycloud.org
这是我写的 python 代码,我在不同的地方运行:
from requests import Request, Session
headers = {
'Accept' : '*/*',
'Accept-Encoding' : 'gzip,deflate,sdch',
'Accept-Language' : 'en-US,en;q=0.8,pt-BR;q=0.6,pt;q=0.4',
'Cache-Control' : 'no-cache',
'Host' : 'demo.buddycloud.org'
}
req = Request('GET',
'https://demo.buddycloud.org/api/guilherme@buddycloud.org/metadata/posts',
headers=headers)
r = req.prepare()
print r.url
s = Session()
resp = s.send(r, verify=False)
print resp, resp.ok
print resp.content
我尝试过的几个不同场景:
Windows 7 64 位,Python 2.7.3,Requests 1.2.3
运行此代码并引发此异常:
requests.exceptions.ConnectionError:
HTTPSConnectionPool(host='demo.buddycloud.org', port=443):
Max retries exceeded with url: /api/guilherme@buddycloud.org/metadata/posts
(Caused by <class 'socket.error'>:
[Errno 10054] An existing connection was forcibly closed by the remote host)
使用 Wireshark 我注意到发生了这种情况,因为我从服务器获得了 TCP 重置。
Ubuntu、Python 2.7.3、请求 1.2.3
我运行了完全相同的代码,没有遇到任何问题,但得到了预期的响应:
https://demo.buddycloud.org/api/guilherme@buddycloud.org/metadata/posts
<Response [200]> True
{
"title" : "guilherme@buddycloud.org Channel Posts",
"description":"This is my buddycloud channel =)",
"access_model":"open",
"creation_date":"2013-04-13T15:24:53.471Z",
"channel_type":"personal",
"default_affiliation":"publisher"
}
阅读到这里,有人可能会猜到这是 Windows x Linux 的问题,但您会看到其中一个场景是 Linux 环境,但我仍然遇到同样的问题。
通过 Postman
正如人们所期望的那样,它工作得很好。
在我们的 Heroku 服务器上,Python 2.7.4,Requests 1.2.3
我们有一个应用向我们的 API 发出相同的调用。那里发生了一个非常相似的错误,我确信原因是一样的(服务器发送 TCP 重置)。这是引发的异常:
HTTPSConnectionPool(host='demo.buddycloud.org', port=443):
Max retries exceeded with url:
/api/guilherme@buddycloud.org/metadata/posts
(Caused by : [Errno 104] Connection reset by peer)
所以我很想知道为什么我们的服务器会这样。我花了很多时间认为问题出在我这边,但我猜它不是,它是由服务器上的某些东西引起的,可能是一些错误配置或与 SSL 相关的东西。
请注意,我的代码通过 python-requests 发送的 header 与 Postman 发送的相同 - 我实际上是在尝试模拟 Postman 的成功请求,但这行不通。
另请注意,在我尝试执行此操作的所有地方,Python 和 Requests 的版本都完全相同。
谁能帮我知道这是怎么回事?在此先致谢,我愿意回答您可能提出的任何其他问题。
最佳答案
这似乎是 ssl 协商的问题。这段代码在 heroku 上对我有用。使用 'SSLv3'
也可以。 'SSLv23'
(默认)中断,不要问我为什么。
from requests import Session
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
class SSLAdapter(HTTPAdapter):
'''An HTTPS Transport Adapter that uses an arbitrary SSL version.'''
def __init__(self, ssl_version=None, **kwargs):
self.ssl_version = ssl_version
super(SSLAdapter, self).__init__(**kwargs)
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=self.ssl_version)
s = Session()
s.mount('https://', SSLAdapter('TLSv1'))
req = s.get('https://demo.buddycloud.org/api/guilherme@buddycloud.org/metadata/posts', verify=False)
print(req)
(SSLAdapter
来自@Lukasa 的博客)
关于ssl - 服务器总是将 RST 发送到某些目的地,并向其他目的地发送适当的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478572/
我在哪里可以从 RFCDES 表中获得 RFCOPTIONS 字符串的描述?每个参数的含义是什么? (H=?,N=?,g=?,l=?, ...) 最佳答案 我认为您应该在交易 sm59 中看到: ht
我在导航组件架构中使用底部导航。我想动态更改第一个 fragment 目标。所以我有 Fragment1 和 Fragment2。我想在某些情况下,单击底部导航栏中的第一项打开 Fragment1,在
有没有使用非硬编码 RFC 目的地的好方法? 现在我们的解决方案是检查使用的是哪个系统,然后将目的地分配给一个变量 IF cl_role EQ 'P'. p_dest = 'ESW300'
我能够使目标沿着屏幕顶部随机生成并在屏幕底部消失。唯一的问题是目标每次只能移动到一个固定点。我希望它们移动到屏幕底部的随机点。有任何想法吗?谢谢。 这是代码: -(void)addTarget{ CC
我有一个列表,其中包含推送 View 的行。该 View 有另一个列表,它推送另一个 View 。原来的List,第一个推送的List会随着数据的变化而更新。但是,推送时最后一个 View 不会更新。
我目前正在致力于将 IBM Webshere 应用程序迁移到 Spring Boot。 作为其中的一部分,有一个 MDB 类需要转换为 @JmsListener。该 MDB 有一个监听多个队列的方法。
我需要使用 phpmailer 发送存储在 mysql 数据库中的多封电子邮件,但是当我想执行它时,它返回 500 页错误,我明白问题出在我在其中输入数据时: ->setTo(["'".$row['e
我正在准备环游世界,并且很想知道世界各地的顶级景点有哪些,因此我正在尝试抓取某个地方的顶级目的地。我想最终到达一个国家的顶级地方以及他们最好的景点。最近添加了 Google Destinations
我想用箭头从当前用户位置旋转 ImageView 到以前保存的某个 GPS 位置。我该怎么做? 从 Location.distanceBetween 方法中获取的 Initial Bearing 是否
我希望能够从 application.properties 设置 @JMSlistener 目标 我的代码是这样的 @Service public class ListenerService {
我有一个 View “B”,它有一个带有参数的初始化程序。 struct B: View { let arg: Int init(arg: Int) { self.ar
好的,我们开始吧。我有一个 cocos2d 应用程序,并且有一些目标朝玩家移动。当玩家移动时,我希望他们再次慢慢地将目的地更改为玩家,这样他们就不会只是移动到空旷的空间中。是否可以更改 Sprite
我正在将 OnDestinationChangedListener 附加到我的 Activity 中的 NavController。 它适用于所有 fragment 目标。但是,当我导航到 Activ
我正在通过制作一个定向的表格对我们的表格进行一些 FK 分析 表示 FK 依赖关系的图,然后遍历 图形。在我的代码中,我使用有向图命名所有内容 术语,但我想多说一点 报告中的“用户友好”。 在这种情况
在 SSIS 包中,我将平面文件中的数据导入数据库,执行 sql 查询并将结果导出到 excel 目的地。我的问题是我有一个 convert,cast 语句,它在 sql 中很好,它返回一个值为 HH
我有一个 Spring 应用程序,它需要查找 JMS 目标才能完成工作。根据我们处于开发环境还是系统测试环境,我们将使用不同的 JMS 实现。 (Oracle AQ在系统测试中使用WebLogic,A
我有一个包含三列(原点、目的地、距离)的矩阵,我想用 Pandas 将其转换为原点/目的地矩阵,有没有一种快速方法(lambda、map)可以在不使用 for 循环的情况下执行此操作? 例如(我拥有的
拥有原始的 websocket 实现: @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocke
自从切换到 Storyboard后,我通过以下方式加载了一个 View Controller [self performSegueWithIdentifier:@"identifier" sender
我有一个名为“detailViewController”的 UIViewController。 使用推送转场通过多个不同的转场访问此 View Controller 。 我面临的问题是 detailV
我是一名优秀的程序员,十分优秀!