c#爬虫-1688官网自动以图搜图

背景

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php代码里加图片,php如何添加图片

php如何添加图片&#xff1f;php中插入图片的代码是什么&#xff1f;PHP插入图片&#xff0c;实际还是输出HTML代码比如&#xff1a;echo ;还可以直接用PHP生成图片显示出来php的gd库可以生成多种图像文件&#xff0c;如gif,png,jpg,wbmp,xpm等&#xff0c;下面来看一个生成正方…

matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com权重改进的粒子群算法在微粒群算法的可调整参数中&#xff0c;惯性权重 是最重要的参数&#xff0c;较大的 …

两个list怎么对比数据_基于日志的回放对比系统设计

‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;马力部门&#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构&#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求&#xff0c;为商家提供各…

让人眼花缭乱的视错觉,太酷炫了!

盯~ 原理&#xff1a;这只死盯着人看的小短手并不是一个普通的纸模&#xff0c;它的眼睛鼻子和嘴也都不在正常的位置上&#xff0c;它的脸其实是凹下去的。 错觉的关键在于我们的大脑对凹面和凸面的加工方式&#xff0c;以及大脑对从图形中挑出一张脸的执着和能力。大脑想要…

swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单

什么是SWOT分析图&#xff1f;大到企业小到个人都会使用到SWOT来对自身所具备的能力进行分析&#xff0c;这也印证了SWOT分析图的重要性&#xff0c;下面我们一起来深度了解SWOT分析吧&#xff01;&#xff01;一&#xff1a;什么是SWOT分析图所谓SWOT分析图是基于内外部竞争环…

有哪些命令行的软件堪称神器?

ag 比grep、ack更快的递归搜索文件内容。 tig 字符模式下交互查看git项目&#xff0c;可以替代git命令。 mycli mysql客户端&#xff0c;支持语法高亮和命令补全&#xff0c;效果类似ipython&#xff0c;可以替代mysql命令。 jq json文件处理以及格式化显示&#xff0c;支持高…

代码 | 一天一点代码坏味道(1)

【代码精进】| 总结/Edison Zhou作为一个后端工程师&#xff0c;想必在职业生涯中都写过一些不好维护的代码。本文是我学习《代码之丑》的学习总结&#xff0c;今天第一天发车&#xff0c;先来看看在命名上的一些常犯的坏味道。0为何要品代码坏味道Martin Flower在《重构》一书…

python base64编码_JS和Python实现AES算法

1. AES原理AES算法是典型的对称加密算法&#xff0c;AES原理可以学习这两篇文档&#xff1a;漫画&#xff1a;什么是AES算法&#xff1a;https://www.toutiao.com/i6783550080784794124/AES加密算法的详细介绍与实现&#xff1a;https://blog.csdn.net/qq_28205153/article/det…

当你老了,一生最后悔什么?大数据告诉你!

‍ 当你老了&#xff0c;一生最后悔什么&#xff1f;

@scheduled注解配置时间_SpringBoot2.0实战(32)配置定时任务

定时任务的几种实现方式&#xff1a;Timer&#xff1a;Java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。一般用的较少。Quartz&#xff1a;使用Quartz&…

小心 Enum Parse 中的坑

小心 Enum Parse 中的坑Intro最近使用枚举的时候&#xff0c;踩了一个小坑&#xff0c;分享一下&#xff0c;主要是枚举从 int 值转成枚举时可能会遇到Sample来看下面的示例&#xff1a;首先定义一个枚举&#xff1a;public enum Color : byte {Red 0,Green 1,Blue 2, }来看…

python判断列表是否为空_Jinja2: 判断返回的列表是否为空

我们在使用 Python 或者 Ansible 来进行自动化任务的时候常常会进行一些数据的组合和提取来生成文件。但是我们需要为不同的情况来做分析和进行判断。如果我们需要对返回的 list 来进行提取的时候我们常常只是运行一个 for loop 就解决了问题。如果输出如下所示&#xff1a;{&q…

在php中使用kind,KindEditor 4.x在PHP中的应用实例!

1.解压放入php项目静态资源文件夹&#xff0c;如下图&#xff1a;Paste_Image.png2.如果只是php使用&#xff0c;可以删除其它类型语言的文件夹&#xff0c;文件结构如下图&#xff1a;Paste_Image.png3.打开php文件夹&#xff0c;更改upload_json.php里文件上传目录文件夹至Up…

你的朋友国庆假期都去了哪里玩?微信大数据告诉你!最远的朋友圈签到竟然来自……

国庆中秋八天假 你是出门四处浪浪浪了 还是躺在家里看朋友圈里的世界名景 10月8日&#xff0c;微信发布《国庆假期微信大数据报告》 从出境人数、热门地区、境外消费等角度 全方位展示国庆期间微信用户的出游情况 哪些城市的人最爱出境游&#xff1f; 哪个国家是最热门的出境目…

mysql安装版和解压版哪个好_红米k30pro变焦版和荣耀30pro哪个好-哪个更值得入手...

红米k30pro变焦版和荣耀30pro&#xff0c;两款手机都有着很强的性能配置&#xff0c;也在同等的价位上&#xff0c;今天我们就来对比一下&#xff0c;看看红米k30pro变焦版和荣耀30pro哪个性价比更高&#xff0c;有哪些配置区别&#xff01;一、主要参数对比荣耀30 Pro红米K30 …

记一次CPU持续100%及分析方法

背景 某天晚上八点多&#xff0c;突然收到一个 CPU 爆表的告警。过了一会&#xff0c;几个业务线就开始反馈系统变慢了。后面紧急处理了这台机器后&#xff0c;让业务先恢复正常。后续看了一下监控&#xff0c;拔凉拔凉的。这个服务是比较重要的一个老业务&#xff0c;.NET Fra…

php中请写出定义变量的两种方法,php定义变量几种

1、定义常量define("CONSTANT", "Hello world.")&#xff1b;常量只能包含标量数据(boolean&#xff0c;integer&#xff0c;float 和 string)&#xff0c;调用常量时&#xff0c;只需要简单的用名称取得常量的值&#xff0c;而不能加“$”符号。注: 常量和…

c语言三目运算符_C语言中的三目运算符是啥?有何用处?

一般来说&#xff0c;C语言中的三目运算符为a?b:c即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为&#xff1a;表达式1? 表达式2&#xff1a;表达式3求值规则为&#xff1a;如果表达式1的值为真&#xff0c;则以表达式2 的值作为条件表达式的值&#xff0c;否…

Dotnet的局部函数和委托的对比

上一篇说了一下委托&#xff0c;这篇来说说局部函数和委托的对比。把委托和局部函数放成前后篇&#xff0c;是因为这两个内容很像&#xff0c;用起来容易混。需要了解委托相关内容&#xff0c;可以看这一篇 【传送门】使用委托表达式(Lambda)假设一个场景&#xff1a;我们有一个…