curl.perform() pycurl.error: (23, 'Failed writing body (0 != 59)')

article/2025/10/7 14:29:09

在使用python3.7编码时,引入pycurl模块和StringIO模块后,容易引起上述错误

导入StringIO模块的解决方案:

只有在python2中才能导入StringIO模块,直接  from StringIO import StringIO  即可

但是python3,STringIO和cStringIO模块已经没了,要使用的话,需要导入io模块:

from io import StringIO
dot_data = StringIO()

也可以通过导入six模块来使用StringIO:

from six import StringIO

或者

from sklearn.externals.six import StringIO 

再提供一种python2和python3都兼容的方法:

try:from StringIO import StringIO
except ImportError:from io import StringIO

至此,不同python版本导入StringIO模块的问题就解决了。

但是pycurl在进行字符串编码时,还会受到python版本的影响,具体如下:

写入stringio

在python 2下,可以使用 StringIO 对象:

import pycurl
from StringIO import StringIO
c = pycurl.Curl()
c.setopt(c.URL,'http://pycurl.io')
buffer = StringIO()
c.setopt(c.WRITEDATA, buffer)
# Same result if using WRITEFUNCTION instead:
#c.setopt(c.WRITEFUNCTION, buffer.write)
c.perform()
# ok

在python 3下,当pycurl使用 bytes 参数,响应必须写入 BytesIO 对象:

import pycurl
from io import BytesIO
c = pycurl.Curl()
c.setopt(c.URL,'http://pycurl.io')
buffer = BytesIO()
c.setopt(c.WRITEDATA, buffer)
# Same result if using WRITEFUNCTION instead:
#c.setopt(c.WRITEFUNCTION, buffer.write)
c.perform()
# ok

尝试使用 StringIO 对象将产生错误::

import pycurl
from io import StringIO
c = pycurl.Curl()
c.setopt(c.URL,'http://pycurl.io')
buffer = StringIO()
c.setopt(c.WRITEDATA, buffer)
c.perform()

错误信息如下:

以下习惯用法可用于需要与Python2和Python3兼容的代码:

import pycurl
try:# Python 3from io import BytesIO
except ImportError:# Python 2from StringIO import StringIO as BytesIO
c = pycurl.Curl()
c.setopt(c.URL,'http://pycurl.io')
buffer = BytesIO()
c.setopt(c.WRITEDATA, buffer)
c.perform()
# ok
# Decode the response body:
string_body = buffer.getvalue().decode('utf-8')

 


http://chatgpt.dhexx.cn/article/Eag66rMB.shtml

相关文章

关于python的url处理

基本环境: python2.7 1 完整的url语法格式: 协议://用户名密码:子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数值#标识 2 urlparse模块对url的处理方法 urlparse模块对url的主要处理方法有:urljoin/urlsplit/urlunsplit/urlpar…

windows10+python3.7使用pip安装pycurl失败

使用pip install pycurl安装pycurl失败: python setup.py egg_info did not run successfully. 可以单独下载pycurl依赖文件然后安装 sArchived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu) 选择Python对应版本的文件进行下载&#xff0…

Pycurl介绍

pycurl — A Python interface to the cURL library Pycurl包是一个libcurl的Python接口.pycurl已经成功的在Python2.2到Python2.5版编译测试过了. Libcurl是一个支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 和 LDAP的客户端URL传输库.libcurl也支持HTTPS认证,H…

[windows]python 安装pycurl

问题描述 pip install pycurl 报错 手动安装 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 页面搜索: pycurl 下载对应版本的whl文件,我是windows环境 python3.8 所以下载pycurl-7.45.1-cp38-cp38-win32.whl 安装:…

Python实用模块之pycurl

软硬件环境 ubuntu 19.04 64bitanaconda3 with python 3.7.3pycurl 7.43.0.2 简介 CURL是一个基于URL进行数据传输的命令行工具,使用C语言编写,支持http,https,ftp,telnet,file,ldap等常见网络传…

ipcs -a

消息队列、共享内存、信号量

ipcc

IPCCX装完后连接不了LDAP,怎么解决?? 装完了IPCCX, 靠, 直接给我来歌60秒关机, 后面还有LDAP连接问题, 我的IPCCX server 可以ping通ccm server, 为什么LDAP会挂呢??? 请问我现在要怎…

ipcs报错:kernel not configured for shared memory、semaphore、message queues [解决方法]

前言 今天在复习linux进程间通信的shared memory 共享内存时,在PC端的VMare Workstation虚拟机的Ubuntu上测试我写的shared_memory_CREAT.c 和shared_memory_CONSUME.c 时正常在PC端运行,就想着把程序用交叉编译器编译成arm格式放到linux开发板上运行试…

ipcs

 linux命令-ipcs 格式:ipcs [-asmq] [-tclup] ipcs [-smq] -i id ipcs -h 功能描述:ipcs命令用来显示系统存在的ipc(进程间通信)相关信息。 参数:-i 显示指定id的ip…

IPC方案

近期了解了不少网络摄像头相关知识,主要功能组成如下: WIFI,USB接口或者SDIO接口实现 RJ45 本地TF存储 IR CUT,滤光片切换 移动侦测,人体感应 夜视功能,依靠红外灯 云台控制,PWM控制Moto&#…

Linux15 --- 信号量、ipcs

1、IPC机制: 进程间通信(管道、信号量、共享内存、消息队列、套接字) 2、信号量: 可以类比于红绿灯,对于路口这个共享的通行权,谁得到红绿灯的通行信号,才可以得到路口的通行权,没…

Linux ipcs命令与ipcrm命令的用法详解

转载地址:http://www.jb51.net/article/40805.htm linux/uinx上提供关于一些进程间通信方式的信息,包括共享内存,消息队列,信号 ipcs用法 ipcs -a 是默认的输出信息 打印出当前系统中所有的进程间通信方式的信息 ipcs -m 打印出…

ipcs命令详解——共享内存、消息队列、信号量定位利器

多进程间通信常用的技术手段包括共享内存、消息队列、信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程通信中出现的通信问题。目前也有一些帖子介绍ipcs命令的使用方…

(1)IPC简介

Unix/Linux IPC简介 简述1. 消息传递演变过程2. 同步形式演变 进程、线程与信息共享IPC对象的持续性名字空间fork、exec和exit对IPC对象的影响总结参考资料 简述 IPC是进程间通信(interprocess communication)的简称。用来描述运行在一个操作系统之上的不同进程间各种消息传递…

Linux——信号量(定义、示例、信号量接口、ipcs命令)

目录 1、信号量 2、信号量举例 3、信号量的接口 4、通过控制进程来完成打印机操作 5、ipcs命令 1、信号量 (1)定义:​​​​​​ ​信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源时&#xff…

什么是IPC?

目录 IPC的简介: IPC的主要功能模块: IPC信号处理过程: IPC硬件构成: IPC的简介: IPC:是IP Camera的简称。它是在前一代模拟摄像机的基础上,集成了编码模块后的摄像机。它和模拟摄像机的区别…

IPC是什么?

IPC是什么? ipc是IP Camera的缩写词,IP是网际协议,Camera是照相机、摄影机,IP Camera顾名思义就是网络摄像机,它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。 网络摄像机又叫IP CAMERA(简称IP…

linux ipcs命令详解

进程间通信概述 进程间通信有如下的目的:1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改&#xff0c…

ipcs 命令

在unix/linux下,查看共享内存、信号量,队列等共享信息 相应的命令是ipcs [-m|-s|-q] -m列出共享内存,-s列出共享信号量,-q列出共享队列 清除命令是 ipcrm [-m|-s|-q] $id -m 删除共享内存,-s删除共享信号量&#xff0…

Linux的IPC命令

进程间通信概述 进程间通信有如下的目的:1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改,…