草庐IT

7个比较稳定的国内图床API 图片上传接口 (Python实战)

xxsyxxAI 2023-04-17 原文

[https://mp.weixin.qq.com/s?__biz=Mzg3NjgzOTQ0OA==&mid=2247483653&idx=1&sn=06a0ed970a29f7c4801b3617e3060130&chksm=cf2d5672f85adf64a04aae5bb0d14b57ab7cb03eb1ae44ddf47330b6fdb4c9d1cc88af1e744c&token=326147852&lang=zh_CN#rd](7个比较稳定的国内图床API 图片上传接口 (Python实战))

1.七个网站的Python实战代码

1.汽车之家

def t1():
    #汽车之家
    ##请上传JPG、JPEG、BMP格式图片
    import requests
    from requests_toolbelt import MultipartEncoder
    from bs4 import BeautifulSoup
    cookie = '''

    '''.replace("\r", "").replace("\n", "").replace(" ", "").encode('utf-8')
    header = {
        "Cookie": cookie,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"
    }

    data = MultipartEncoder(fields={
        "uploadFile": (
            '图片名称.jpg', open(r'图片地址', 'rb'), "image/jpeg")})
    header['Content-Type'] = data.content_type
    print(BeautifulSoup(requests.post('https://i.autohome.com.cn/setting/face', headers=header, data=data).text,'lxml').select('#preview1'))

2.起点中文网

def t2():
    #起点中文网
    import requests
    from requests_toolbelt import MultipartEncoder
    from bs4 import BeautifulSoup
    cookie = '''

    '''.replace("\r", "").replace("\n", "").replace(" ", "").encode('utf-8')
    header = {
        "Cookie":cookie,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"
    }
    data = MultipartEncoder(fields={
        "_csrfToken": "y4z3yEFehOVEEMyDgrTQCuBKrxFhI7c41W8te9vp",
        "image": (
            '图片名称.png', open(r'图片地址', 'rb'), "image/png")})
    header['Content-Type'] = data.content_type
    return "https://" + BeautifulSoup(
    requests.post("https://my.qidian.com/ajax/headimage/uploadimg", headers=header, data=data).text,'lxml').body.string.replace("\\", "").split("//")[1][:-3] + ".png"

3.喜马拉雅

def t3():
    # 喜马拉雅
    import time
    import requests
    from requests_toolbelt import MultipartEncoder
    from bs4 import BeautifulSoup
    import os
    import hashlib
    import datetime
    from urllib import parse
    # step 1
    cookie = '''

    '''.replace("\r", "").replace("\n", "").replace(" ", "").encode('utf-8')
    header = {
        "Cookie": cookie,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"
    }
    name = '图片名称.jpg'
    path = r"图片地址"
    rsp1 = requests.post('https://cupload.ximalaya.com/clamper-token/token', data={"fileName": name,
                                                                                   "fileSize": str(
                                                                                       os.path.getsize(path)),
                                                                                   "uploadType": "picture",
                                                                                   "callerType": "ting"},
                         headers=header).json()['token']
    print(rsp1)
    # step 2
    # Content-Type application/octet-stream 这里的文件上传方式我还不清楚,因为MD5那关没过去
    header = {"Authorization": str(rsp1).encode('utf-8'),
              "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"}
    time2 = str(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")).replace('/0', "/")
    MD5 = str('')  # 请原谅我太菜了,看不懂 JS代码,不明白这里离得 MD5加密方式, 可能是 token结合某个量吧,希望会的大神告诉咱怎么弄清楚这个
    url={
        "id":"WU_FILE_0",
        "name":name,
        "type":"image/png",
        "lastModifiedDate":time2,
        "size":str(os.path.getsize(path)),
        "timeStart":str(int(time.time() * 1000)),
        "chunks":"1",
        "chunk":"0",
        "multipartId":"",
        "md5":MD5,
        "uid":"0",}
    ctx = str(requests.post(url='https://cupload.ximalaya.com/upload/file/blk?'+parse.urlencode(url) , headers=header, files={'files': open(path, 'rb')}).json()['data']['ctx']).encode('utf-8')
    multipartId = str(requests.post(url='https://cupload.ximalaya.com/upload/file/blk?'+parse.urlencode(url), headers=header, files={'files': open(path, 'rb')}).json()['data']['multipartId']).encode('utf-8')
    # step3
    # 获取link
    header = {"Authorization": str(rsp1).encode('utf-8'),
              "Cookie": cookie,
              "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"}
    data = {"uid": 0,
            "uploadType": "picture",
            "appkey": "ting",
            "fileSize": str(os.path.getsize(path)),
            "fileExtName": "jpg",  # 如果是png图片那就是 png
            "fileName": name,
            "deviceType": "web",
            "clientIp": "",
            "ctxList": [ctx],
            "multipartId": multipartId,
            "codeOrNot": "1"}
    print(requests.post('https://cupload.ximalaya.com/upload/merge/mkfile', headers=header, json=data)['data'][
              'freeFileUrl'])

4.中关村在线

def t4():
    # 中关村在线
    # 仅支持jpg、png格式,且文件小于2M
    import requests
    from requests_toolbelt import MultipartEncoder
    from bs4 import BeautifulSoup
    cookie = '''
    
    '''.replace("\r", "").replace("\n", "").replace(" ", "").encode('utf-8')
    header = {
        "Cookie": cookie,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"
    }

    data = MultipartEncoder(fields={
        "myPhoto": (
            '图片名称.jpg', open(r'图片地址', 'rb'), "image/jpeg")})
    header['Content-Type'] = data.content_type
    print(requests.post('https://my.zol.com.cn/index.php?c=Ajax_User&a=uploadImg', headers=header, data=data).json()[
              'url'])

5.失效:蘑菇街

6.失效:VIVO手机论坛

7.花瓣网

def t7():
    # 花瓣网
    import requests
    from requests_toolbelt import MultipartEncoder
    cookie = '''
    
       '''.replace("\r", "").replace("\n", "").replace(" ", "").encode('utf-8')
    header = {
        "Cookie": cookie,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"
    }
    data = MultipartEncoder(fields={
        "file": (
            '图片名称.jpg', open(r'图片地址', 'rb'), "image/jpeg")})
    header['Content-Type'] = data.content_type
    print(requests.post('https://api.huaban.com/upload', headers=header, data=data).json()[
              'key'])  # https://gd-hbimg.huaban.com/

2.总结

【multipart/form-data; boundary=】类型,没有验证手段的简单易行,有验证手段的需要参考JS判断加密方式,如上述“喜马拉雅”的实战,我没做出来,因为加密方式没弄懂,JavaScript代码经过加密之后,完全看不懂,也没用解密的手段。

3.参考文献

[1]: https://blog.csdn.net/xiaojianpitt/article/details/6856536	"Multipart/form-data POST文件上传详解"
[2]: https://zhuanlan.zhihu.com/p/106860812	"7个比较稳定的国内图床API 图片上传接口"
[3]: https://mp.weixin.qq.com/s?__biz=MzI5MTg1NjA4Nw==&mid=2247548954&idx=1&sn=cb11f2eb5bcfe6349d695acc3755c1aa&chksm=ec080ba2db7f82b4195276e3ff6892ca346d7abbde0dab4c2eb3fe46582b74d5113665592a18&scene=21#wechat_redirect	"Python实现各种加密,接口加解密不再难"
[4]: https://blog.csdn.net/weixin_41646716/article/details/85070981	"options请求"
[5]: https://www.cnblogs.com/bainianminguo/p/12099532.html#5087066	"python通过http(multipart/form-data)上传文件的方法 "

有关7个比较稳定的国内图床API 图片上传接口 (Python实战)的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  3. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  4. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  5. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  6. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  7. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  8. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  9. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  10. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

随机推荐