背景

在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";//getAppKeystring 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";//getAppKeystring 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());}}}
}

c#爬虫-1688官网自动以图搜图相关推荐

  1. c#爬虫-1688官网自动登录

    背景 在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等.那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容.这里面就会涉及到自动登录的问题. 登录地址 h ...

  2. 使用Milvus搭建以图搜图服务

    使用Milvus搭建以图搜图服务 介绍 安装Milvus Java调用Milvus插入.查询 引入Maven依赖 创建Milvus客户端 实现Milvus插入向量数据 实现Milvus 查询向量 结尾 ...

  3. 图片素材类网站必备以图搜图、智能搜图识图图像搜索系统imgso,让素材网站更智能专业

    很多背景墙.墙纸.壁纸.电视墙.装修设计素材网都必配以图搜图.这个以图搜图识图的好处不言而喻,是很多素材网必备功能. 推荐一款专业的以图搜图系统imgso,它是一个以图搜图专业系统,让你的网站拥有站内 ...

  4. 基于 Milvus 的以图搜图系统 2.0

    Milvus 以图搜图 1.0 版本自发布以来便受到广大用户的欢迎.近日,Zilliz 推出了 Milvus 以图搜图系统 2.0 版.本文将介绍 Milvus 以图搜图系统 2.0 版的主要更新内容 ...

  5. 11款相似图片搜索引擎推荐,以图搜图将不再是难事

    你想凭着一张现有图片找出它的原始图片,或者是凭着一张小的缩略图找出原始大图吗? 下面的十一款搜索引擎可以帮你实现,以图找图,以图搜图,以图片搜索相似的图片. 1.http://tineye.com/ ...

  6. 零基础实战行人重识别ReID项目-基于Milvus的以图搜图

    目录 第一阶段,ReID的基本概念 1.1 ReID定义 1.2 技术难点 1.3 常用数据集 1.4 评价指标 1.5 实现思路 1.6 具体方案 第二阶段:复现算法 2.1 PCB的骨干网络 2. ...

  7. Java+ElasticSearch+Pytorch实现以图搜图

    以图搜图,涉及两大功能:1.提取图像特征向量.2.相似向量检索. 第一个功能我通过编写pytorch模型并在java端借助djl调用实现,第二个功能通过elasticsearch7.6.2的dense ...

  8. 十二大相似图片搜索网站(以图搜图)

    十二大相似图片搜索网站(以图搜图) 如何凭着一张现有图片找出它的原始图片,或者是凭着一张小的缩略图找出原始大图?下面的搜索引擎可以帮你实现.以图找图.以图搜图. 以图搜图是颠覆性的搜索方式,基于图片的 ...

  9. 十大相似图片搜索网站(以图搜图)

    十大相似图片搜索网站(以图搜图) 2011-04-13 21:07:56|  分类: 默认分类 |  标签:以图搜图  图片搜索  搜图  百度搜图  搜索引擎  |举报|字号 订阅 下载LOFTER ...

最新文章

  1. 如何根据点云计算对应物体的长宽
  2. 解决启动mysql.exe闪退问题
  3. java中判断字符串是否为数字的三种方法
  4. python怎么导入时间-python 插入日期数据到Oracle
  5. NTU课程:MAS714 (3)Graph Algorithms
  6. USTC English Club Note20171015(5)
  7. java设计模式之责任链模式以及在java中作用
  8. Android常用名令集锦(图文并茂)!
  9. 美研计算机案例,美国研究生申请案例:耶鲁大学录取:计算机硕士【2010】
  10. 问题七十:计算机图形中的采样(Sampling)
  11. linux 英汉词典程序shell+postgresql版
  12. Oracle卸载方法
  13. 如何用python进行数据处理?(一)
  14. html svg在线画板,很棒的SVG图形(多边形)在线生成器
  15. win10共享计算机win7,win10与win7局域网共享的方法
  16. 震旦打印机扫描显示服务器连接错误,震旦打印机Scan2me扫描失败(exchange邮箱)...
  17. 邮箱自动化(smtplib模块)--以邮件正文HTML表格形式
  18. ARM STMFD, STMFA, STMED, STMEA, LDMFD, LDMFA, LDMED, LDMEA
  19. 软件项目管理文档模板目录
  20. 【论文翻译】:PyramidBox: A Context-assisted Single Shot Face Detector

热门文章

  1. 2019.8.13 sdfzoier
  2. Python——逻辑运算(or,and)
  3. yii2笔记: 单元测试
  4. C#集合类型——Array、ArrayList、List 之浅谈
  5. 学习使用新浪接口随笔(一)
  6. arguments.callee()事例 参数检验
  7. iphone4 短信截获
  8. Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...
  9. Safari 版本回退方法
  10. Spring Boot 使用Redis