curl解决gzip和Transfer-Encoding:chunked的问题

0 个评论
客户的小偷站不能用了,今天有空看了一下 原来是对方站由http变https了,好在我有相关的代码,于是我换了上去 发现访问竟然是一片空白,按理说不可能啊 于是我想到了可能是证书验证,要先去掉验证 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//为了不要证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//为了不要证书 然后给长点时间 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5000);//超时时间 然后终于有反应了,出来的是乱码,气得我牙痒痒 我查了一下相关资料,说是要看被抓页面的header 我发现了两个比较奇怪的~ 一个是用了gzip压缩,另外一个是Transfer-Encoding:chunked Gzip比较好解决,一句话搞定 curl_setopt($ch, CURLOPT_ENCODING, ‘gzip’); 但是chunked让我头疼,网上资料说是分块传输什么的,相当于把源代码分几块传输 有人说把http版本弄成1.0 curl_setopt($ch, CURLOPT_HTTP_VERSION, ‘1.0’);//为了回避Transfer-Encoding:chunked 但我当时测试的时候,没有修改$ch,一直没成功,只好找其他出路,(所有事情结束后才发现原来是$ch没改对) 然后我找了第二个办法,从别人资料里找了unchunk和unchunkHttp11函数 测试的时候unchunkHttp11老是丢失前面的一大段字符,不懂为啥 后面只好用了unchunk,幸好成功了 function unchunk($result) { return preg_replace_callback( '/(?:(?:\r\n|\n)|^)([0-9A-F]+)(?:\r\n|\n){1,2}(.*?)'. '((?:\r\n|\n)(?:[0-9A-F]+(?:\r\n|\n))|$)/si', create_function( '$matches', 'return hexdec($matches[1]) == strlen($matches[2]) ? $matches[2] : $matches[0];' ), $result ); } function unchunkHttp11($data) { $fp = 0; $outData = ""; while ($fp < strlen($data)) { $rawnum = substr($data, $fp, strpos(substr($data, $fp), "\r\n") + 2); $num = hexdec(trim($rawnum)); $fp += strlen($rawnum); $chunk = substr($data, $fp, $num); $outData .= $chunk; $fp += strlen($chunk); } return $outData; }
2022-03-23 / 网站制作技术 / 491 views浏览
阅读全文

Discuz论坛网站UCenter乱码怎么解决

0 个评论
出现像问号一样的乱码符号 基本上是由于网站的编码不对造成的 将ucenter\data\config.inc.php下载下来 在最顶上添加 <?PHP header("content-Type: text/html; charset=gbk"); ?>
2022-03-13 / discuz / 443 views浏览
阅读全文

tnnd,哈罗单车竟然判断我私占单车

0 个评论
你们自己心里没有数吗?没有人骑你们的单车还怪客户私自占有???也不想一想为什么现在那么少人骑你们单车??? 老子信用那么高,会占你单车吗??? 老子再不用你hello的产品了,行不行???
2022-03-04 / 生活 / 438 views浏览
阅读全文

最近发现我的电脑自动刷新功能没了

0 个评论
主要的表现在:进入一个文件夹,新建文件,然后还是空白,要右键手动刷新一次才显示出来 上网去找过答案,说是注册表某个键值要修改 我把这个键值导出后就是这样的 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Update] "UpdateMode"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Update\UpdateMode] "DWORD"=hex(2):30,00,00,00 起效十来秒,很快又不行了 后来我想起前几天电脑很慢,我用优化大师对注册表进行了优化,我猜测是某些注册表里的信息被删除了 很块我注意到之前安装的一个软件Media Preview,就是给文件夹里的视频弄缩略图的,现在也不正常了 于是我打开了它的设置,Media Preview Configuration,在视频格式里先恢复系统设置,然后再全选格式,重新引用 神奇的一幕出现了,文件夹自动刷新功能回来了
2022-03-02 / 生活 / 432 views浏览
阅读全文

C#的process进程调用的外部程序关闭后执行某个操作

0 个评论
方法一:这种方法会阻塞当前进程,直到运行的外部程序退出 System.Diagnostics.Process exep = System.Diagnostics.Process.Start(@“C:\Windows\Notepad.exe”); exep.WaitForExit();//关键,等待外部程序退出后才能往下执行 MessageBox.Show(“Notepad.exe运行完毕”); 方法二:为外部进程添加一个事件监视器,当退出后,获取通知,这种方法时不会阻塞当前进程,你可以处理其它事情 System.Diagnostics.Process exep = new System.Diagnostics.Process(); exep.StartInfo.FileName = @“C:\Windows\Notepad.exe”; exep.EnableRaisingEvents = true; exep.Exited += new EventHandler(exep_Exited); exep.Start(); //exep_Exited事件处理代码,这里外部程序退出后激活,可以执行你要的操作 void exep_Exited(object sender, EventArgs e) { MessageBox.Show(“Notepad.exe运行完毕”); } https://blog.csdn.net/qq_45835940/article/details/107087274
2022-02-19 / C# / 469 views浏览
阅读全文

这一两天学习了一下视频编辑

0 个评论
主要是从好看视频里看的一下Pr的编辑教程,感觉确实比较专业,也意味着操作麻烦,比如添加字幕好像很麻烦,我看到网上都是通过网易的一个什么平台去上传视频,然后让它自动生成字幕,现在好像是这个平台收费了,而且上传很浪费时间,然后他识别文字生成字幕也需要一段时间 然后我又下载了抖音官方的剪映专业版来用了一下,他比较简单,效果的功能比较少一些,好的地方也有,比如说声音可以变声,也有根据语音直接生成字幕,还有他提供了很多创意的小片段,但是它最大的问题还是导出,我用它来剪辑一个大概200兆的1080 P的视频,就只有剪短去掉一些片段这个操作,导出后竟然有1.6G,竟然比原来大那么多,降低一些帧率之类的之后还有600多兆,我直接无语了
2022-02-17 / 生活 / 473 views浏览
阅读全文

c# 调用外部程序对文件夹内文件进行处理

0 个评论
DirectoryInfo TheFolder = new DirectoryInfo(path_video); //只获取一层,子文件夹没处理 foreach (FileInfo item in TheFolder.GetFiles("*.*")) { string name = item.Name;//处理目录下某一文件名 string fullname = item.FullName;//处理目录下带路径文件名 System.Diagnostics.Process Process1 = new System.Diagnostics.Process(); Process1.StartInfo.FileName = ffmpeg_address.Text;//调用外部程序名 Process1.StartInfo.Arguments= @"-i "+fullname+" -ss 2 -offset_x 10 -offset_y 20 -f image2 \""+path_img+"\\"+Path.GetFileNameWithoutExtension(name)+".jpg\" ";//调用程序参数 try { if (Process1.Start()) //开始进程 { Process1.StandardOutput.ReadToEnd(); //读取输出流释放缓冲, 不加这一句,进程会一直无限等待 //MessageBox.Show(Process1.StandardOutput.ReadToEnd()); Process1.WaitForExit(); //MessageBox.Show("Process finished."); } } catch (Exception ex) { Debug.Print("Exception !!!"+ex);//万一出错 } }//end foreach 处理文件夹用下面的 DirectoryInfo TheFolder = new DirectoryInfo(path); //只获取一层,子文件夹没处理 foreach (DirectoryInfo item in TheFolder.GetDirectories()) { string name = item.Name;//lv6下某一文件夹名 }
2022-02-07 / C# / 494 views浏览
阅读全文

c# 选择文件或文件夹

0 个评论
void Button1_select_ffmpegClick(object sender, EventArgs e) { //选择文件 OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以选择多个文件 dialog.Title = "请选择文件夹"; dialog.Filter = "所有文件(*.*)|*.*"; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { ffmpeg_address.Text = dialog.FileName;//把值保存到文本框 } } void Button1_select_dirClick(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径"; dialog.SelectedPath = "E:\\新建文件夹";//默认文件夹 //dialog.RootFolder = Environment.SpecialFolder.Programs; if (dialog.ShowDialog() == DialogResult.OK) { textBox1_editdir.Text = dialog.SelectedPath;//把值保存到文本框 } }
2022-02-07 / C# / 481 views浏览
阅读全文

c# 从大图中截取一部分图片

0 个评论
#region 从大图中截取一部分图片 /// <summary> /// 从大图中截取一部分图片 /// </summary> /// <param name="fromImagePath">来源图片地址</param> /// <param name="offsetX">从偏移X坐标位置开始截取</param> /// <param name="offsetY">从偏移Y坐标位置开始截取</param> /// <param name="toImagePath">保存图片地址</param> /// <param name="width">保存图片的宽度</param> /// <param name="height">保存图片的高度</param> /// <returns></returns> public void CaptureImage(string fromImagePath, int offsetX,int offsetY, string toImagePath, int width, int height) { //原图片文件 Image fromImage = Image.FromFile(fromImagePath); //创建新图位图 Bitmap bitmap = new Bitmap(width, height); //创建作图区域 Graphics graphic = Graphics.FromImage(bitmap); //截取原图相应区域写入作图区 graphic.DrawImage(fromImage, 0, 0, new Rectangle(offsetX, offsetY, width, height), GraphicsUnit.Pixel); //从作图区生成新图 Image saveImage = Image.FromHbitmap(bitmap.GetHbitmap()); //保存图片 saveImage.Save(toImagePath);//, ImageFormat.Png); //释放资源 saveImage.Dispose(); graphic.Dispose(); bitmap.Dispose(); } #endregion
2022-02-07 / C# / 509 views浏览
阅读全文

c# 计算位图灰度值和二值化

0 个评论
static void ToGrey(Bitmap img1) { for (int i = 0; i < img1.Width; i++) { for (int j = 0; j < img1.Height; j++) { Color pixelColor = img1.GetPixel(i, j); //计算灰度值 int grey = (int)(0.299 * pixelColor.R + 0.587 * pixelColor.G + 0.114 * pixelColor.B); Color newColor = Color.FromArgb(grey, grey, grey); img1.SetPixel(i, j, newColor); } } } static void Thresholding(Bitmap img1) { int[] histogram = new int[256]; int minGrayValue=255, maxGrayValue=0; //求取直方图 for (int i = 0; i < img1.Width; i++) { for (int j = 0; j < img1.Height; j++) { Color pixelColor = img1.GetPixel(i, j); histogram[pixelColor.R]++; if (pixelColor.R > maxGrayValue) maxGrayValue = pixelColor.R; if (pixelColor.R < minGrayValue) minGrayValue = pixelColor.R; } } //迭代计算阀值 int threshold = -1; int newThreshold = (minGrayValue + maxGrayValue) / 2; for(int iterationTimes = 0; threshold != newThreshold && iterationTimes < 100; iterationTimes++) { threshold = newThreshold; int lP1 =0; int lP2 =0; int lS1 = 0; int lS2 = 0; //求两个区域的灰度的平均值 for (int i = minGrayValue;i < threshold;i++) { lP1 += histogram[i] * i; lS1 += histogram[i]; } int mean1GrayValue = (lP1 / lS1); for (int i = threshold+1;i < maxGrayValue;i++) { lP2 += histogram[i] * i; lS2 += histogram[i]; } int mean2GrayValue = (lP2 / lS2); newThreshold = (mean1GrayValue + mean2GrayValue) / 2; } //计算二值化 for (int i = 0; i < img1.Width; i++) { for (int j = 0; j < img1.Height; j++) { Color pixelColor = img1.GetPixel(i, j); if (pixelColor.R > threshold) img1.SetPixel(i, j, Color.FromArgb(255, 255, 255)); else img1.SetPixel(i, j, Color.FromArgb(0, 0, 0)); } } }
2022-02-07 / C# / 472 views浏览
阅读全文