RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-198251

AivanF.'s questions

Martin Hope
AivanF.
Asked: 2021-12-30 22:11:12 +0000 UTC

如何使用 GDB 调试异步协程?

  • 1

有一个扩展允许您使用 GDB 来调试 Pythonic 进程,我安装了它并在我的 aiohttp Web 应用程序上尝试了它。但是无论那里执行什么请求,最基本的调用堆栈总是显示在控制台中,没有任何有用的信息:

(gdb) py-bt
Traceback (most recent call first):
  File "/usr/lib/python3.7/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 1739, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever
    self._run_once()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 571, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.7/dist-packages/aiohttp/web.py", line 433, in run_app
    reuse_port=reuse_port))
  File "./my-server/main.py", line 98, in <module>
    web.run_app(app_main, host=host, port=port)

这可能是因为 asyncio 为每个协程创建了自己的调用堆栈。

能够看到调试加载的 Web 应用程序的过程内部对我来说非常重要。如何使用 GDB 查看调用堆栈和中断/继续协程?

python
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2021-12-15 16:12:50 +0000 UTC

mixin 中的基类类型

  • 1

我有一个大班分成混合:

class MyObject(MyObjectFilesMixin, MyObjectProcessingMixin, ...):
    def __init__(self, value):
        self.value = self.preprocess(value)

混合是:

class MyObjectFilesMixin:
    def load_from_file(cls, filename):
        return ...

现在我想在任何地方添加打字:

class MyObjectFilesMixin:
    def load_from_file(cls, filename: str) -> MyObject:
        return ...


class MyObjectProcessingMixin:
    def preprocess(self: MyObject, value: bytes):
        return value  # логика опущена

    def append(self: MyObject, other: MyObject):
        self.value += other.value

但这会导致循环依赖。当然,你可以创建某种视图类MyObjectBase(遵循依赖倒置的原则),这样主类MyObject就可以继承这个基类,mixins在方法中使用它作为参数/结果类型,但还是会很笨拙类型。这怎么能解决?

我有点想念 C++ 头文件/源文件

python
  • 2 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2021-11-20 07:59:17 +0000 UTC

K8s Ingress + Python 上的 API 网关身份验证

  • 1

基于前面关于微服务集群内授权的问题,我有以下更具体的问题。如何在 Kubernetes 中实现 API 网关模式以使用 Python 进行身份验证?这样任何授权方式都可以使用,其他微服务不用担心这个问题。

我的要求/愿望清单:

  1. 使用 Python 代码验证请求,处理登录/注销。
  2. 使用来自 K8s Ingress 的 URL 列表或至少类似的简单但功能强大的 YAML 格式,这样路由不会内置到任何服务的代码中,并且可以快速更新。
  3. 解决方案必须至少具有可容忍的性能。

对这个问题的任何帮助都会有所帮助🙌

python
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2021-11-07 22:03:10 +0000 UTC

微服务架构中的授权

  • 1

有一个具有微服务架构的服务器项目(在 Docker 和 Kuber 上),大部分代码是使用 AIOHTTP 和 Django 用两个 Python 服务编写的(也有使用 NginX 的服务:Ingress,一个静态文件服务器和其他几个) . 我想将这两个服务拆分为更小的服务,以简化代码库并使其更易于管理。那我想把认证检查的授权放到一个单独的微服务中,但是如何实现呢?

我还要澄清一下,问题的本质不在于授权方法,如 OAuth、JWT 等,而具体在于集群架构中的职责和依赖关系的分配。

在我看来,一个好的解决方案是为 Ingress NginX 或它前面的代理服务器添加某种插件,这样这个微服务本身就不知道具体的方法,比如一个授权中间件,它检查 headers/cookies 的访问权限令牌或会话,如果成功则设置用户 ID。

当前架构的简化版本如下所示:

当前架构

我如何提出一个可能的解决方案,以便减少混淆的联系:

所需架构

但我不确定这是否是一个适当的解决方案。至少,这种方法会剥夺项目 Kuber 的 Ingress 的优势,它提供了一个很酷的界面,用于使用控制台中的配置更新路径方案,但据我所知,它不允许提前处理请求,这就是为什么你必须在不方便与 K8s 集成的情况下提出自定义 NginX。

在行业中解决这个问题的替代方案是什么?

我只能想象创建一个请求处理程序来检查授权,然后通过 HTTP/RPC 将请求委托给其他微服务,无需授权;但我怀疑这是一个好的解决方案,因为这样的代理必须解析整个请求,然后再创建一个新的;此外,在其他微服务中,加载了 NginX 的实例作为外部 API 的代理,似乎在它们面前这样的授权代理将成为瓶颈。

python
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-09-04 04:40:16 +0000 UTC

通过 Python.Requests 请求需要很长时间

  • 4

我正在开发和测试(通过requests)远程服务器的代码,从某天开始,我突然开始收到延迟 70-80 秒的最简单请求的响应。同时,我的电脑通过curl,wget或者浏览器发出的相同请求会立即执行,就像从第三方服务器启动的相同 Python 脚本一样。

我尝试在本地使用 Python 3.7 和 2.7 通过 httpS 和 HTTP 进行连接(显然这与 SSL 无关),结果在任何地方都是一样的。我有MacOSX 10.15.1,Ubuntu 18.04.5,NginX和Aiohttp在服务器上,但是我在Flask上提出了hello-world,结果是一样的,显然,服务器代码也没有影响。

问题:为什么请求需要这么长时间,从我的计算机到这个特定的服务器,并且只通过 Python ?!以及如何更好地调试以找到问题的原因?

我试过这样,但它没有多大帮助:

import requests
import http.client
import logging

logging.basicConfig(level=logging.DEBUG)
http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

# Домен конечно изменён
response = requests.get('http://sub.test.com:5990/')
print('** Code:', response.status_code)
print('** Response:', response.content.decode('utf-8'))

结论:

DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): sub.test.com:5990
# Спустя 75 секунд:
send: b'GET / HTTP/1.1\r\nHost: sub.test.com:5990\r\nUser-Agent: python-requests/2.22.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Content-Type: text/html; charset=utf-8
header: Content-Length: 13
header: Date: Thu, 03 Sep 2020 19:26:25 GMT
header: Server: Python/3.6 aiohttp/3.6.2
DEBUG:urllib3.connectionpool:http://sub.test.com:5990" GET / HTTP/1.1" 200 13
** Code: 200
** Response: Hello, World!

如果您在等待时终止脚本,则回溯将如下所示:

Traceback (most recent call last):
  File "test.py", line 19, in <module>
    response = requests.get(URL)
  File "/Library/Python/3.7/site-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/Library/Python/3.7/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Python/3.7/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Python/3.7/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Python/3.7/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/Library/Python/3.7/site-packages/urllib3/connectionpool.py", line 672, in urlopen
    chunked=chunked,
  File "/Library/Python/3.7/site-packages/urllib3/connectionpool.py", line 387, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/Applications/.../Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/Applications/.../Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/Applications/.../Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/Applications/.../Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1016, in _send_output
    self.send(msg)
  File "/Applications/.../Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 956, in send
    self.connect()
  File "/Library/Python/3.7/site-packages/urllib3/connection.py", line 184, in connect
    conn = self._new_conn()
  File "/Library/Python/3.7/site-packages/urllib3/connection.py", line 157, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw
  File "/Library/Python/3.7/site-packages/urllib3/util/connection.py", line 74, in create_connection
    sock.connect(sa)

更新

注意到通过指定IP地址连接成功,显然问题出在DNS解析中。下落代码的类似物urllib3/util/connection.py可以毫无问题地执行:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('sub.test.com', 5990))
sock.close()

但是,发现它是在现实生活中connection.py使用的socket.AF_INET6,并且有了这个说法,连接就挂了。

解决方案

事实证明,除了正确的 IPv4 条目之外,该域在 DNSAAAA中还有一个带有无效 IPv6 地址的条目,删除该条目可以解决问题。A

python
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-08-06 02:25:20 +0000 UTC

记录和监控服务器组上的微服务

  • 3

我有一个包含两组虚拟服务器的项目(每组中的服务器只是具有相同微服务集的同一映像的副本,例如 k8s 中的 pod)、一个平衡器和几个带有数据库的 VPS。现在Docker和K8S由于项目规模小还没有使用(不过有计划)。相反,我们使用了我们云提供商的功能:管理磁盘映像、虚拟机及其组,并根据负载自动创建/删除。目前它运行良好,但缺乏集中的日志记录和监控,我试图强调以下需求:

  1. 带有服务器参数的仪表板,如 CPU 使用率、RAM、磁盘空间、网络等。对于每个服务器。我们的供应商提供了一些仪表板,还有很酷的控制台实用程序,但我希望有一个独立且集中的解决方案。
  2. 具有不同 HTTP 代码的响应数量的仪表板,既针对整个服务器组,也针对每个服务器单独。我们使用的是 NginX,它提供了一个状态页面,但这仅适用于单个服务器(同样,需要集中化)。
  3. 用于分析日志的窗口,支持多行消息(如回溯);
  4. 独立于编程语言和技术栈。
  5. 可以通过邮件设置通知(或者更好的是,运行控制台脚本以向 TG 发送通知),并带有自定义的指标触发器。
  6. 也许还有其他一些重要的功能?

额外的愿望:

  1. 解决方案必须是免费的。
  2. 易于设置也是可取的。我希望一种解决方案可以足够灵活,以涵盖所有描述的日志记录和监控需求。
  3. 解决方案的成熟度/流行度、文档和示例的可用性。
  4. 当需要迁移到容器时,解决方案应该保持最小的变化。

在我看来,最终的解决方案如下:1)保存日志和计算指标的服务器,提供用于分析日志的仪表板和工具,以及 2)安装在每个服务器上的脚本,该脚本在计时器上运行并定期将本地日志发送到服务器。但是:脚本如何知道使用配置在特定服务器上查找和发送哪些日志?但也许我对这种工作算法是错误的。

该网络有大量关于 LogStash、ElasticSearch、Grafana、Kibana、Zabbix、Loki、Prometheus 等的建议,但它们几乎没有描述不同解决方案之间的差异及其特性,也没有说明何时以及为什么会出现最好使用一种或另一种解决方案。我希望看到关于哪些软件可以相互使用、如何以及何时使用的现代解释,以及根据所描述的需求进行比较。我也希望这些答案对许多其他开发人员有用,因为这个话题在我们这个时代非常相关和有用:)

логирование
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-06-23 14:00:26 +0000 UTC

aiohttp:嵌套的 RouteTableDef 路径

  • 0

如何在路径中添加前缀RouteTableDef以免重复 URL 的公共部分?Flask 有flask.Blueprint,Django django.urls.include,但是 aiohttp 呢?

我想要这样的代码:

from aiohttp import web
routes = web.RouteTableDef()

@routes.get('/api/info')
async def get_info(request):
    ...

@routes.get('/api/obj')
async def get_obj(request):
    ...

app = web.Application()
app.add_routes(routes)

转换成这样的东西:

from aiohttp import web

routes = web.RouteTableDef()
routes_api = web.RouteTableDef()
routes.append(routes_api, prefix='/api')

@routes_api.get('/info')
async def get_info(request):
    ...

@routes_api.get('/obj')
async def get_obj(request):
    ...

app = web.Application()
app.add_routes(routes)

能够在单独的文件中对部分路径进行描述。

python
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-03-12 15:31:41 +0000 UTC

设置 VPN WireGuard 的问题

  • 2

我需要创建一个VPN,这样

  1. 客户端具有静态 IP 地址。
  2. 客户端可以相互通信,也可以与服务器通信,
  3. 客户端可以通过 VPN 访问 Internet。
  4. 另外,我想设置自己的 DNS 和私有域(由 NginX 处理)。

我的配置服务器是:

[Interface]
Address = 10.0.0.1/24, fd86:ea04:1115::1/64
ListenPort = 5555
PrivateKey = xxxxx

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0

这些是客户端配置:

[Interface]
PrivateKey = xxxxx
ListenPort = 5555
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0, ::/0

但是当我尝试通过加载服务器配置时wg setconf wg0 /etc/wireguard/wg0.conf出现此错误:

Line unrecognized: `Address=10.0.0.1/24,fd86:ea04:1115::1/64'
Configuration parsing error

所以我注释掉了那行。但这可能会迫使 WG 为自己和客户选择随机 IP 地址。

要启动 WireGuard,我运行以下命令:

ip link add dev wg0 type wireguard
ip address add dev wg0 10.0.0.1/24
ip link set up dev wg0

之后,该命令wg给出以下输出:

interface: wg0
  public key: xxxxx
  private key: (hidden)
  listening port: 5555

peer: xxxxx
  endpoint: <my IP address>:6228
  allowed ips: 0.0.0.0/0
  latest handshake: 2 minutes, 11 seconds ago
  transfer: 26.02 KiB received, 248 B sent

从客户端(我的带有 WireGuard GUI 的 MacOS)我可以连接,但是:

  • 没有网络连接。我什至无法在全局地址上 ping 服务器,尽管它可以在私有地址上运行10.0.0.1。
  • 即使我在客户端配置中指定了不同的端口,我也可以连接到 VPN。我想这意味着它实际上并没有连接。

如何让 WireGuard 以我想要的方式工作?我的配置有什么问题?

PS。服务器上iptables没有防火墙,所以这不是问题。另外,在文件中,/etc/sysctl.conf我指定了net.ipv4.ip_forward=1and net.ipv6.conf.all.forwarding=1,并执行了systemctl restart systemd-networkd.
软件版本。操作系统:Ubuntu 18.04.1 LTS,内核:4.15.0-20-generic,WG wireguard-tools v1.0.20200206:。

ubuntu
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-10-08 03:32:38 +0000 UTC

Python:需要用额外的逗号解析 JSON

  • 1

像这样的代码:

import json
s = '{ "key1": "value1", "key2": "value2", }'
json.loads(s)

在 Python 2 中引发以下错误:

ValueError:期望属性名称:第 1 行第 16 列(字符 15)

在 Python 3 中类似:

json.decoder.JSONDecodeError:期望用双引号括起来的属性名称:第 1 行第 16 列(字符 15)

当然,如果你把字典中最后一个值后面的逗号去掉,那么就不会出错了。但是如何在字典或列表的末尾用逗号准确地处理 JSON 呢?这是一件小事,此外,JavaScript 允许这样做。

例如,当您删除最后一个条目时,管理控制台中可能会出现这样的任务,以便快速手动编辑设置 - 我不想通过大海捞针并正确放置某种逗号来使用户紧张。

这个问题的翻译。

python
  • 2 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-02-08 02:10:45 +0000 UTC

Xcode:如何从项目中删除源代码控制并删除所有历史记录?

  • 1

有一段时间我使用 Xcode 内置的版本控制系统,但现在我决定不使用它。在 Xcode IDE 中禁用版本控制的方法有哪些?

git
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-01-27 16:59:32 +0000 UTC

Xcode,CMake:安装和连接assimp dylib,__abort_with_payload错误

  • 0

使用CMake(我使用Xcode作为生成器,其他选项不起作用)我在桌面上为 assimp 4 库构建了一个Xcode项目并编译了该项目。然后我将生成的库连接到我的 Mac OS 项目:将其添加到该部分并在. 所以它起作用了,我的项目正在使用这个库编译和加载模型。.dylibLink Binary with LibrariesHeader Search Paths

CMake创建了一个 223 MB 的assimp Xcode 项目,尽管最终文件.dylib只有 23 MB 并且其标头小于 1 MB。另外,我的桌面上不需要这个assimp项目文件夹。因此,我决定移动带有标题的库并删除其他文件。

在 Mac OS 下的 Xcode 项目中,我删除了对.dylib assimp及其头文件的引用,然后重复所有相同的步骤以包含库,并使用新路径。结果,我设法无错误地构建项目并运行它,但随后立即弹出错误:__abort_with_payload. Clean我尝试使用以及其他一些技巧来清理项目,但没有任何帮助。我还尝试保存assimp项目目录并将其从桌面上删除,但它仍然会导致相同的运行时错误。

如何解决这个问题?我希望有另一种方法,而不是简单地重新编译库项目,这是一个非常令人沮丧的过程。为什么会这样?也许它.dylib存储了创建它的项目中其他文件的路径?还是我只是错过了包含库的一些步骤?

Xcode版本:8.3.3。


解决方案

感谢@arrowd的提示,仍然需要安装库项目才能将生成的文件保存在系统目录中。但是,Xcode 中的目标install给出了无法复制文件的错误。所以我以一种新的方式构建了项目(使用Unix Makefiles生成器),然后在生成的项目文件夹中我执行make构建项目并sudo make install以管理员权限安装,以便脚本可以复制到系统文件夹。结果,头文件在这里结束:

/usr/local/include/assimp

文件.dylib在这里:

/usr/local/lib/libassimp.4.0.0.dylib

之后,在应该使用该库的Xcode项目中,您需要执行以下操作:

  • 在Biuld Settings您需要添加的部分中

    1. /usr/local/include/至Header Search Paths
    2. /usr/local/lib/至Library Search Paths
  • 在Build Phases您需要将.dylib库附加到Link Binary with Libraries.

但是,我们还没有弄清楚为什么会发生这种情况;欢迎对此发表评论。

xcode
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-01-25 06:45:41 +0000 UTC

iOS:UITableView 表格滚动/滚动

  • 1

将表格滚动/滚动UITableView到最顶部,最底部的方法是什么?

ios
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-01-24 16:23:27 +0000 UTC

如何从 UITextField 放置和移除焦点?第一响应者与它有什么关系?

  • 1

如何UITextField在正确的时间激活、聚焦和移除,隐藏键盘?First Responder的概念与此有何关系?

ios
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-01-16 05:36:59 +0000 UTC

JS:是否可以使用空字符串作为字典或对象键

  • 5

凭经验发现这段代码适用于几种浏览器:

var countsByStatus = { 
  '': 23, // неизвестный статус
  'started': 45,
  'draft': 3,
  'accepted': 23,
  'hold': 2345,
  'fixed': 2,
  'published': 345
}

这存储了具有不同状态的元素的数量,有些可能没有状态。他们的号码被添加到带有“空字符串”键的元素中,这意味着“无状态”。这种方法看起来简单明了,但我不确定它是否正确,是否到处都支持?

这个问题的翻译。

javascript
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-01-07 17:28:43 +0000 UTC

着色器:为什么我们需要一个 normalMatrix,以及如何找到它?

  • 2

在各种示例中,着色器代码包含不同的uniform具有以下变换矩阵的代码:(mat4 projMatrix投影矩阵)、mat4 viewMatrix(相机变换矩阵)、mat4 modelMatrix(模型变换矩阵)和某种法线矩阵:mat4 normalMatrix. 这是什么意思,我在哪里可以得到它?

opengl
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-01-04 19:53:45 +0000 UTC

GLSL:输入/输出/变化/属性/统一关键字

  • 2

varying许多着色器有/关键字attribute,有些使用 in/ out,但它们没有一对一的关系。如何使用它们?这是什么意思uniform?哪些是关于身体数据的,哪些是关于顶点的,哪些是关于单个像素的?

c
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-12-18 05:42:25 +0000 UTC

Vk.Ads:在 Python、GAE 中通过 POST 上传图片

  • 1

在搜索 SO、示例和文档两天后遇到了无法解决的问题。我真的希望这里有一个解决方案。

我正在开发一项用于在 Python 和 Google App Engine 中自动创建 VK 广告的服务。广告图像首先上传到我的服务器(第 1 部分),然后在适当的时间从那里上传到 VK 服务器(第 2.1 和 2.2 部分)。看起来与加载时相同的字节存储在图像服务器上,但以防万一,我附上了代码。

要将图片上传到广告,您首先需要获取一个链接(这很简单,所以我们跳过它),然后使用此链接发送一个 POST 请求,其中包含图片文件的文件字段(doc 链接)。我以两种方式(2.1 和 2.2)实现了发送图像,但都返回errcode: 2,这意味着повреждённый файл. 我认为问题在于请求本身的结构,但是,我不会错过在我的服务器上加载/存储图像或 Vk.Ads API 的特定工作中出现问题的可能性。我将非常感谢您的回答和建议。

1. 将照片上传到您的服务器

import webapp2
from google.appengine.ext import ndb

# для хранения изображения на сервере
class Photo(ndb.Model):
    name = ndb.StringProperty()
    img = ndb.BlobProperty()

    @staticmethod
    def get(name):
        retval = Photo.query(Photo.name == name).get()
        return retval

    @staticmethod
    def create(name, blob):
        retval = Photo()
        retval.name = name
        retval.img = blob
        return retval

class PhotosPage(webapp2.RequestHandler):
    def get(self):
        # основное содержимое страницы:
        html = '''<form action="/photos" method="post" enctype="multipart/form-data">
            <input type="file" name="flimg"/>
            <input value="new_pic" name="flname"/>
            <input type="submit" value="Upload"/> </form>'''

    def post(self):
        n = str(self.request.get('flname'))
        f = self.request.get('flimg')
        p = Photo.get(n)
        if p:
            p.img = f
        else:
            p = Photo.create(n, f)
        p.put()

2.1。发送照片、方法 #1、urlfetch和海报库:

from poster.encode import multipart_encode, MultipartParam
from google.appengine.api import urlfetch

name = 'file'
content = ... # бинарник файла
where = ... # полученная ссылка

options = {
    'file': MultipartParam(
        name=name,
        value=content,
        filename=name,
        filetype='image/png',
        filesize=len(content))
}

data, headers = multipart_encode(options)
pocket = "".join(data)

result = urlfetch.fetch(
    url=where,
    payload=pocket,
    method=urlfetch.POST,
    headers=headers)

2.2. 发送照片,方法 #2,请求库:

import requests

name = 'file'
content = ... # бинарник файла
where = ... # полученная ссылка

# пробовал и без этого словаря; всегда ли он нужен?
data = {
    'fileName': name,
    'fileSize': len(content),
    'description': 'undefined',
}

result = requests.post(where, files={name: StringIO(content)}, data=data)

此外,对于第二种方法,我能够获取正在发送的消息的内容:

POST
https://pu.vk.com/c.../upload.php?act=ads_add&mid=...&size=m&rdsn=1&hash_time=...&hash=...&rhash=...&api=1

Content-Length: 15946
Content-Type: multipart/form-data; boundary=b4b260eace4e4a7082a99753b74cf51f

--b4b260eace4e4a7082a99753b74cf51f
Content-Disposition: form-data; name="description"
undefined

--b4b260eace4e4a7082a99753b74cf51f
Content-Disposition: form-data; name="fileSize"
15518

--b4b260eace4e4a7082a99753b74cf51f
Content-Disposition: form-data; name="fileName"
file

--b4b260eace4e4a7082a99753b74cf51f
Content-Disposition: form-data; name="file"; filename="file" 
< File binary content >

--b4b260eace4e4a7082a99753b74cf51f-- 
python
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-11-21 18:07:49 +0000 UTC

Pandas:与 OR 逻辑合并

  • 4

如何在Pandas 'e 中通过逻辑运算OR对多个字段的表进行内部联合?就像SQL中的表达式中的条件?该功能允许您只获得几个字段的完全匹配(即逻辑与操作)。ONJOINmerge

例子。有dataframedf1和df2,它们有两个共同的字段A和B,需要根据条件合并df1.A = df2.A OR df1.B = df2.B表中的信息df1被认为具有较高的优先级,即如果匹配只出现在一个字段(A或B)中,那么第二个的值取自df1。

df1:

#    A    B        C
0    104  peter    28
1    228  andre    10
2    89   paul     17
3    219  saul     14

df2:

#    A    B
0    104  jessy
1    230  andre
2    219  saul
3    126  amy

结果:

#    A    B        C
0    104  peter    28
1    228  andre    10
2    219  saul     14
python
  • 2 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-11-01 15:45:07 +0000 UTC

Google App Engine:等待来自 URL 错误的 HTTP 响应时超出了最后期限

  • 0

使用来自Google App Engine Python框架的 HTTP 请求时,有时会出现错误:

HTTPException:等待来自 URL 的 HTTP 响应时超出了期限:...`。

如何延长请求超时?

python
  • 1 个回答
  • 10 Views
Martin Hope
AivanF.
Asked: 2020-10-04 15:31:45 +0000 UTC

如何在 UITableViewCell 表格单元格中制作透明背景?

  • 0

如何制作UITableViewCell具有透明背景的表格单元格,使其下方的元素可见?

objective-c
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5