1688以图搜图调用商品详情的API接口功能实现【附详细代码教程】

背景

在1688有个功能,就是上传图片,就可以找到类似的商品。如下

图片

网址 :https://www.1688.com/

这时候,我们可以使用程序来代替,大批量的完成图片上传功能。

实现思路

1、找到图片上传接口

图片


post请求,form表单中有signature签名

图片

2、再找sign生成接口,全局搜素找一下signature,发现了一个返回signature的接口。

图片


接口链接:https://open-s.1688.com/openservice/ossDataService
 

图片


这个接口也有一个变动的参数 appKey
 

图片


全局搜索后在js文件中查看一下
 

图片


往下找就可以发现appkey的生成了。
 

图片


通过debug来查看生成规则。
 

图片


获取加密时间的接口:https://open-s.1688.com/openservice/.htm?
参数:outfmt =json&serviceIds=cbu.searchweb.config.system.currenttime

需要先请求这个接口,获取加密时间。

   private void go(string parhfile)        {            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/.htm?serviceIds=cbu.searchweb.config.system.currenttime&outfmt=json", 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Currenttimemodel>(retString.Replace("cbu.searchweb.config.system.currenttime", "currenttime"));                //  SetText("加密时间:" + ss.currenttime.dataSet.ToString());                getsin(ss.currenttime.dataSet.ToString(), parhfile);            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }

再把时间和appName 传入 getAppKey。
 

图片


然后e= “appname ; t” ,appName的base64编码之后的结果是 “cGNfdHVzb3U=”

图片

经过encode64返回 i ( appkey)

图片

然后通过上面生成sign的接口:https://open-s.1688.com/openservice/ossDataService

传入参数就行请求,就可以返回signature,policy,accessid。

params = {
     "appName": key,
     "appKey": base64.b64encode(appkey.encode("utf-8")),
         }
  • 1

  • 2

  • 3

  • 4

  /// <summary>        /// sign生成接口        /// </summary>        /// <param name="dataSet"></param>        private void getsin(string dataSet, string parhfile)        {            string appName = "pc_tusou";            //getAppKey            string appKey = Base64.EncodeBase64("utf-8", appName + ";" + dataSet.ToString());            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/ossDataService?appName=" + appName + "&appKey=" + appKey, 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Rootsin>(retString);                //  SetText("sign:" + ss.data.signature);                string key = "cbuimgsearch/" + Base64.Getimgname() + Base64.GetTimeStamp() + ".jepg";                var client = new RestClient("https://cbusearch.oss-cn-shanghai.aliyuncs.com/");                client.Timeout = -1;                var request = new RestRequest(Method.POST);                request.AddHeader("Origin", "https://www.1688.com");                client.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36";                request.AddHeader("Accept", "*/*");                request.AddHeader("Cache-Control", "no-cache");                request.AddHeader("cookie", "_samesite_flag_=true; _tb_token_=ee5138b911917; cookie2=163f6e3722351213514df4c9ab9116f6; t=96e8d0ab6d636f19306c429b276db552; __cn_logon__=false; ali_ab=120.253.224.246.1587973275662.6; l=caJGIJNTkgnFkWiGkSYyeKDwPQuOAiFJdcPgDahIhDlFGpKMvULclIQGPBDmDhmDdCsLYIU; na=ijBRbdRXZeKwRcTHilfNHSt+; ");                request.AddHeader("refer", "https://www.1688.com/");                request.AddParameter("name", Base64.Getname() + ".jpeg");                request.AddParameter("key", key);                request.AddParameter("OSSAccessKeyId", ss.data.accessid);                request.AddParameter("callback", "");                request.AddParameter("policy", ss.data.policy);                request.AddParameter("signature", ss.data.signature);                request.AddParameter("success_action_status", "200");                request.AddFile("file", parhfile);                IRestResponse response2 = client.Execute(request);                Console.WriteLine(response2.Content);                if (response2.StatusCode == HttpStatusCode.OK)                {                    string picurl = "https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=" + key + "&spm=";                    SetText3("\r\n" + picurl);                    Write(picurl);                }                else                {                    SetText("错误代码:" + response2.StatusCode.ToString());                }            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }

3、数据详情接口

图片上传之后,返回的数据接口:
https://search.1688.com/service/imageSearchOfferResultViewService?

图片


参数:
 

图片


imageAddress是在上传图片之后返回的值
requestId 初始化参数,可以为空。
整个流程就是这样了,接着构造请求就可以获取数据了。

图片

完整代码

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Net;using System.Net.Http;using System.Net.Http.Headers;using System.Net.Security;using System.Security.Cryptography.X509Certificates;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;using Newtonsoft.Json;using Reptiles1688;using RestSharp;
namespace WindowsFormsApp1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }
        private void button1_Click(object sender, EventArgs e)        {            ThreadPool.QueueUserWorkItem(new WaitCallback(crawlingWeb), "test");        }
        public void Write(string s)        {            string path = System.Environment.CurrentDirectory + "\\图片url\\" + Guid.NewGuid().ToString();            if (!Directory.Exists(path))                Directory.CreateDirectory(path);            FileStream fs = new FileStream(path + "\\data.txt", FileMode.Create);            //获得字节数组            byte[] data = System.Text.Encoding.Default.GetBytes(s);            //开始写入            fs.Write(data, 0, data.Length);            //清空缓冲区、关闭流            fs.Flush();            fs.Close();        }
        private delegate void SetLabelDelegate(string value);
        private void SetText(string value)        {            if (this.InvokeRequired)            {                SetLabelDelegate d = new SetLabelDelegate(SetText);                this.Invoke(d, new object[] { value });            }            else            {                textBox1.Text = value.ToString() + textBox1.Text;            }        }
        private delegate void SetLabelDelegate3(string value);
        private void SetText3(string value)        {            if (this.InvokeRequired)            {                SetLabelDelegate3 d = new SetLabelDelegate3(SetText3);                this.Invoke(d, new object[] { value });            }            else            {                textBox3.Text = value.ToString() + textBox3.Text;            }        }
        private void crawlingWeb(object data)        {            for (int aa = 1; aa < 50; aa++)            {                //  SetText3(aa.ToString());                for (int a = 1; a < 4; a++)                {                    string ss = "D:\\pppppppppppppp\\" + a + ".jpg";                    //  SetText3(aa.ToString() + "-" + a);
                    go(ss);                    Thread.Sleep(500);                }            }
            SetText3("\r\n ok");        }
        private void go(string parhfile)        {            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/.htm?serviceIds=cbu.searchweb.config.system.currenttime&outfmt=json", 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Currenttimemodel>(retString.Replace("cbu.searchweb.config.system.currenttime", "currenttime"));                //  SetText("加密时间:" + ss.currenttime.dataSet.ToString());                getsin(ss.currenttime.dataSet.ToString(), parhfile);            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }
        /// <summary>        /// sign生成接口        /// </summary>        /// <param name="dataSet"></param>        private void getsin(string dataSet, string parhfile)        {            string appName = "pc_tusou";            //getAppKey            string appKey = Base64.EncodeBase64("utf-8", appName + ";" + dataSet.ToString());            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/ossDataService?appName=" + appName + "&appKey=" + appKey, 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Rootsin>(retString);                //  SetText("sign:" + ss.data.signature);                string key = "cbuimgsearch/" + Base64.Getimgname() + Base64.GetTimeStamp() + ".jepg";                var client = new RestClient("https://cbusearch.oss-cn-shanghai.aliyuncs.com/");                client.Timeout = -1;                var request = new RestRequest(Method.POST);                request.AddHeader("Origin", "https://www.1688.com");                client.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36";                request.AddHeader("Accept", "*/*");                request.AddHeader("Cache-Control", "no-cache");                request.AddHeader("cookie", "_samesite_flag_=true; _tb_token_=ee5138b911917; cookie2=163f6e3722351213514df4c9ab9116f6; t=96e8d0ab6d636f19306c429b276db552; __cn_logon__=false; ali_ab=120.253.224.246.1587973275662.6; l=caJGIJNTkgnFkWiGkSYyeKDwPQuOAiFJdcPgDahIhDlFGpKMvULclIQGPBDmDhmDdCsLYIU; na=ijBRbdRXZeKwRcTHilfNHSt+; ");                request.AddHeader("refer", "https://www.1688.com/");                request.AddParameter("name", Base64.Getname() + ".jpeg");                request.AddParameter("key", key);                request.AddParameter("OSSAccessKeyId", ss.data.accessid);                request.AddParameter("callback", "");                request.AddParameter("policy", ss.data.policy);                request.AddParameter("signature", ss.data.signature);                request.AddParameter("success_action_status", "200");                request.AddFile("file", parhfile);                IRestResponse response2 = client.Execute(request);                Console.WriteLine(response2.Content);                if (response2.StatusCode == HttpStatusCode.OK)                {                    string picurl = "https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=" + key + "&spm=";                    SetText3("\r\n" + picurl);                    Write(picurl);                }                else                {                    SetText("错误代码:" + response2.StatusCode.ToString());                }            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }    }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/238186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

禾匠榜店商城系统 RCE漏洞复现

0x01 产品简介 禾匠榜店商城系统是浙江禾匠信息科技有限公司的一套基于PHP和MySQL的商城系统。 0x02 漏洞概述 禾匠榜店商城系统的api/testOrderSubmit模块下的preview方法存在命令执行漏洞,攻击者可以向服务器写入木马文件,直接获取服务器权限 0x03 漏洞概述 FOFA:bod…

【qt】Qt+OpenCv读取带有中文路径的图片

【opencv4.5.1版本】下载exe解压即可。。。https://opencv.org/releases/page/2/ 【qt5.15.2】 pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to …

2.Feign使用、上下文隔离及源码阅读

目录 概述使用配置pom.xmlfeign 接口编写controller 测试降级处理pom.xmlapplication.yml代码 Feign如何初始化及调用源码阅读初始化调用 feign的上下文隔离机制源码 结束 概述 阅读此文&#xff0c;可以知晓 feign 使用、上下文隔离及源码阅读。源码涉及两方面&#xff1a;fe…

elk:filebeat

elk:filebeat日志收集工具和logstash相同 filebeat是一个轻量级的日志收集工具&#xff0c;所使用的系统资源比logstash部署和启动时使用的资源要小的多。 filebeat可以运行在非java环境&#xff0c;他可以代替logstash在非java环境上收集日志。 filebeat无法实现数据的过滤…

先进的Web3.0实战热门领域NFT项目几个总结分享

非同质化代币&#xff08;NFT&#xff09;的崛起为游戏开发者提供了全新的机会&#xff0c;将游戏内物品和资产转化为真正的可拥有和交易的数字资产。本文将介绍几个基于最先进的Web3.0技术实践的NFT游戏项目&#xff0c;并分享一些相关代码。 Axie Infinity&#xff08;亚龙无…

linux搭建seata并使用

搭建seata 官网 在linux下搭建 下载1.6.1版本&#xff1a;地址 新建文件夹、上传压缩包并解压 [roothao ~]# cd /usr/local/software/ [roothao /usr/local/software]# ls canal docker elk gitlab jdk mysql nacos nexus nginx rabbitmq redis redis_sentinel…

Jemeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…

ICC2:low power与pg strategy(pg_mesh)

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 用pg_strategy创建power stripe,示例如下: set pd_list {{DEFAULT_VA VDD_DIG VDD_DIG VSS} {PD_DSP VDD_DIG VDD_DSP VSS} } ;#两个电源域,DEFAULT_VA和PD_DSP是对应voltage area名字,其中D…

做数据分析为何要学统计学(6)——什么问题适合使用t检验?

t检验&#xff08;Students t test&#xff09;&#xff0c;主要依靠总体正态分布的小样本&#xff08;例如n < 30&#xff09;对总体均值水平进行差异性判断。 t检验要求样本不能超过两组&#xff0c;且每组样本总体服从正态分布&#xff08;对于三组以上样本的&#xff0…

2023/12/10总结

学习 WebSocket 一共四种方法&#xff0c;传递数据是要通过JSON格式传递 前端 onopen 在连接时 onmessage 收到消息时 通常携带参数 event &#xff0c;event.data 是消息 onerror 发生错误时 onclose 关闭连接时 发送消息 需要安装 vue-native-websocket 包 pnpm i vue-n…

数学建模算法

算法部分 1. 评价类模型2. TOPSIS3. 线性规划4. 聚类分析5. 预测模型6. 拉伊达准则(对异常值进行剔除)7. 数据拟合8. 图论代码练习1. 模拟圆周率2. 斐波那契数列3. 四只鸭子落在一个圆中概率4. 方程2: y" uy y,初值y(0) 1,y(0) 0 算法讲解 matlab代码大全 1. 评价类模型…

IP与以太网的转发操作

TCP模块在执行连接、收发、断开等各阶段操作时&#xff0c;都需要委托IP模块将数据封装成包发送给通信对象。 网络中有路由器和集线器两种不同的转发设备&#xff0c;它们在传输网络包时有着各自的分工。 (1)路由器根据目标地址判断下一个路由器的位置 (2)集线器在子网中将网…

权威认证!景联文科技入选杭州市2023年第二批省级“专精特新”中小企业认定名单

为深入贯彻党中央国务院和省委省政府培育专精特新的决策部署&#xff0c;10月7日&#xff0c;杭州市经济和信息化委员会公示了2023年杭州“专精特新”企业名单&#xff08;第二批&#xff09;。 根据工业和信息化部《优质中小企业梯度培育管理暂行办法》&#xff08;工信部企业…

FFmpeg的AVFilter框架总成AVFilter-AVFilterContext

毫无疑问,还是和前面的一样一个context和一个包含有回调函数指针的插件结构体,想要实现自己的插件,主要实现里面的回调函数就可以了,当然,AVFilter比其它模块稍微复杂一点还要牵扯到其它一些辅助模块,在其它章节介绍 下面是关键函数调用图: /*** Add a frame to the bu…

用 CSS 写一个渐变色边框的输入框

Using_CSS_gradients MDN 多渐变色输入框&#xff0c;群友问了下&#xff0c;就试着写了下&#xff0c;看了看 css 渐变色 MDN 文档&#xff0c;其实很简单&#xff0c;代码记录下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta ch…

实验制备高纯酸PFA酸纯化器材质分析,SCH亚沸蒸馏器特点是什么

.酸纯化器&#xff1a;也称酸蒸馏器、高纯酸提取系统、酸纯化系统、亚沸腾蒸馏器、高纯酸蒸馏纯化器。常规实验室分析中&#xff0c;各种酸及试剂被广泛应用于日常的样品处理及分析中。那么应该选用什么材质的酸纯化器呢 氟塑料酸纯化器&#xff0c;提纯酸效果好&#xff0c;避…

12.11 C++ 作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

数据库 02-03补充 聚合函数--一般聚合分组和having

聚合函数&#xff1a; 01.一般的聚合函数&#xff1a; 举个例子&#xff1a; 一般聚合函数是用于单个元祖&#xff0c;就是返回一个数值。 02.分组聚合&#xff1a; 举个例子&#xff1a;

scikit-learn-feature_selection

参考&#xff1a; Feature selection 1. 移除低方差的特征 方差低&#xff0c;说明变化不大。 将特征方差值小于一定值的特征移除 单变量特征分析 通过单特征分析&#xff0c;选择最好的&#xff08;前k个&#xff09;的特征&#xff0c;scikit-learn 提供的方法有&#x…

移液器吸头材质选择——PFA吸头在半导体化工行业的应用

PFA吸头是一种高性能移液器配件&#xff0c;这种材料具有优异的耐化学品、耐热和电绝缘性能&#xff0c;使得PFA吸头在应用中表现出色。那么它有哪些特点呢&#xff1f; 首先&#xff0c;PFA吸头具有卓越的耐化学腐蚀性能。无论是酸性溶液、碱性溶液还是有机溶剂&#xff0c;P…