You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python向TinEye发送带图片的POST请求?

解决TinEye图片上传POST请求400错误的调试指南

400错误基本是请求格式不合法,给你几个排查方向和修正方案:

  • 核对Multipart表单的参数名
    TinEye对表单字段名要求很严,抓包看到的上传字段名是什么就必须用什么——网页端一般是image,别瞎改成file或者别的。要是抓包发现还有其他必填参数(比如csrf令牌),也得一并塞进fields里。

  • 别瞎改Content-Type
    用MultipartEncoder的时候,它会自动生成带正确boundary的Content-Type,手动写反而容易错。其他请求头里,User-Agent和Referer得带上,不然服务器可能直接拒掉你的请求,比如用Chrome的UA就行。

  • 文件必须用二进制模式读
    上传图片时,得用open("your_image.jpg", "rb"),用文本模式打开的话,文件内容会乱码,服务器解析不了,直接返回400。

  • 修正后的代码示例(网页端上传)
    先拿session获取csrf令牌,再构造请求:

    import requests
    from requests_toolbelt.multipart.encoder import MultipartEncoder
    from bs4 import BeautifulSoup
    
    # 用session维持会话,自动处理cookie
    session = requests.Session()
    index_res = session.get("https://tineye.com/")
    # 从页面里提取csrf令牌
    soup = BeautifulSoup(index_res.text, "html.parser")
    csrf_token = soup.find("input", {"name": "csrfmiddlewaretoken"})["value"]
    
    # 构造multipart表单
    encoder = MultipartEncoder(
        fields={
            "csrfmiddlewaretoken": csrf_token,
            "image": ("test.jpg", open("test.jpg", "rb"), "image/jpeg")
        }
    )
    
    # 设置请求头,只需要指定Content-Type和Referer、UA
    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",
        "Referer": "https://tineye.com/",
        "Content-Type": encoder.content_type
    }
    
    # 发送请求
    res = session.post("https://tineye.com/search", headers=headers, data=encoder)
    print(res.status_code)
    print(res.text)
    
  • 排查反爬限制
    TinEye网页端有反爬,光带csrf还不够,要是频繁请求可能会触发验证,得确保你的请求和正常浏览器行为一致——比如不要一下子发太多请求,UA别太奇怪。

  • 别搞混网页端和API接口
    要是用官方API,地址是https://api.tineye.com/rest/search,得带api_key参数,字段要求和网页端不一样,别把网页端的参数直接套到API上,肯定报错。

内容的提问来源于stack exchange,提问作者windowshopr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:15:43