第一次发这样的网络数据包。记录一下。

API参考 https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/live/manage.md

做了很多尝试才成功,遇到最大的困难是总是报告未登录,拯救我的是打开浏览器观察数据包格式。如图所示

筛选以定位对应请求,观察请求的具体格式,发现表单内容有两项csrf相关的键值对,我之前请求时只发了其中一个。此外也通过此方法确定了post请求的键值对是怎样打包和编码的。

如果编码方式错误,或输入随机字符,反馈信息一般是csrf验证错误。

下面列代码。

工具类。提供Post功能、cookie转化为字典功能。其中Post用了新版.Net库提供的HttpClient。

值得注意的是,数据的键值对以字典(好吧实际上用的是一个键值对数组)方式传入,编码时先对键和值分别编码,然后直接用"="和"&"拼接。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Web;
using System.Net.Http.Headers; namespace TestFor_BLiveAPI
{
public static class TheUtil
{
public static string Post(string url, string cookie, List<KeyValuePair<string, string>> dataList)
{
HttpClient httpClient = new HttpClient(); var encData = "";
bool isFirstDataItem = true;
foreach (var dataItem in dataList)
{
string addi = isFirstDataItem ? "" : "&";
isFirstDataItem = false;
string curLine = WebUtility.UrlEncode(dataItem.Key) + "=" + WebUtility.UrlEncode(dataItem.Value);
encData += addi + curLine;
}
Console.WriteLine(encData);
byte[] btData = Encoding.UTF8.GetBytes(encData);
var ctns = new ByteArrayContent(btData);
ctns.Headers.ContentLength = btData.Length;
ctns.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded; charset=UTF-8");
ctns.Headers.Add("cookie", cookie);
var tsk = httpClient.PostAsync(url, ctns);
tsk.Wait();
using (var stm = new StreamReader(tsk.Result.Content.ReadAsStream(), Encoding.UTF8))
{
return stm.ReadToEnd();
}
} public static Dictionary<string, string> CookieToDict(string cookie)
{
Dictionary<string, string> resDict = new Dictionary<string, string>();
var items = cookie.Split(';');
for (int i = 0; i < items.Length; i++)
{
var curItem = items[i].Trim();
var lr = curItem.Split("=");
resDict[lr[0].Trim()] = lr[1].Trim();
}
return resDict;
}
}
}

实际运行代码

using TestFor_BLiveAPI;

string cookie = "————从浏览器中拷贝出的一长串文本,它是你的cookie————";
//把cookie放进字典里,方便提取需要的信息
var cookieDict = TheUtil.CookieToDict(cookie); char[] titleRanRes = new char[] {
'喵','汪','咪','咕','嘎','咩','噗','啊','呜','嘤','呼',
}; Random r = new Random(); string ranTitle = "";
for (int i = 0; i < 5; i++)
{
//拼接一个随机直播间标题,方便确认是否改成功
ranTitle += titleRanRes[r.Next(titleRanRes.Length)];
}
string csrfVal = cookieDict["bili_jct"]; Console.WriteLine("尝试变更直播间标题=" + ranTitle); var res = TheUtil.Post("https://api.live.bilibili.com/room/v1/Room/update", cookie,
new List<KeyValuePair<string, string>>() {
new KeyValuePair<string, string>("room_id","669896"),
new KeyValuePair<string, string>("title",ranTitle),
new KeyValuePair<string, string>("csrf_token",csrfVal),
new KeyValuePair<string, string>("csrf",csrfVal),
}); Console.WriteLine(res); Console.WriteLine("以上。");
Console.ReadLine();

用C#发送post请求,实现更改B站直播间标题[简单随笔]的更多相关文章

  1. django-Ajax发送POST请求(csrf跨站请求的三种方式),文件的上传

    第一种 <script> $(".eq").on("click",function () { $.ajax({ url:"/eq/&quo ...

  2. python接口自动化(八)--发送post请求的接口(详解)

    简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...

  3. 原生js发送ajax请求

    堕落了一阵子了,今天打开博客,发现连登录的用户名和密码都不记得了.2016年已过半,不能再这么晃荡下去了. 参加了网易微专业-前端攻城狮 培训,目前进行到大作业开发阶段,感觉举步维艰.但是无论如何,不 ...

  4. 转:jquery向普通aspx页面发送ajax请求

    本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的ScriptManager. $.ajax向普通页面发送 ...

  5. 使用Ajax发送http请求(get&post请求)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 同步和异步 同步和异步的概念 同步:必须等待前面的任务完成,才能继续后面 ...

  6. Java发送Http请求并获取状态码

    通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...

  7. AngularJs的$http发送POST请求,php无法接收Post的数据解决方案

      最近在使用AngularJs+Php开发中遇到php后台无法接收到来自AngularJs的数据,在网上也有许多解决方法,却都点到即止.多番摸索后记录下解决方法:tips:当前使用的AngularJ ...

  8. Ajax发送POST请求SpringMVC页面跳转失败

    问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转.思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可 ...

  9. 使用HttpClient来异步发送POST请求并解析GZIP回应

    .NET 4.5(C#): 使用HttpClient来异步发送POST请求并解析GZIP回应 在新的C# 5.0和.NET 4.5环境下,微软为C#加入了async/await,同时还加入新的Syst ...

  10. 在发送ajax请求时加时间戳或者随机数去除js缓存

    在发送ajax请求的时候,为了保证每次的都与服务器交互,就要传递一个参数每次都不一样,这里就用了时间戳 大家在系统开发中都可能会在js中用到ajax或者dwr,因为IE的缓存,使得我们在填入相同的值的 ...

随机推荐

  1. SQL相关知识点

    一.基本概念 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件). 数据表(table) - 某种特定类型数据的结构化清单. 模式(schema) - 关于 ...

  2. OSS 解锁

    一.解开LSKEYF00的编辑锁定  进入SE30,点击Tips & Tricks按钮,输入以下代码     UPDATE PROGDIR SET EDTX = ''       WHERE ...

  3. idea导入数据库

    yml文件(在启动项文件(main)里,eg:springbook文件里面) sh-bean里org.example.sh.beans的Category类   CategoryDAO名字要和Categ ...

  4. Must be called at the top of a `setup` function vue3使用vue-i18n时出现的报错

    在某js文件中引入 import {useI18n} from "vue-i18n"; 使用:useI18n().t('APP_LOADING') 修改后: import i18n ...

  5. c输入的缓冲区

    作业题:输入两个整数(12和37),从键盘输入'A'和'a'时,输出两个数中的较大数:从键盘输入'B'和'b'时,输出两个数中的较小数. int a; char c; scanf("%d&q ...

  6. 学习记录--C++文件读入与存储

    C++中对文件操作需要包含头文件<fstream> 操作文件的三大类:1.ofstream写操作 2.ifstream读操作 3.fstream读写操作 一.写文件步骤 1.包含头文件 # ...

  7. msfvenom的使用

    msfvenom也只metasploit中的一个很强的工具,msfvenom生成木马非常的迅速可以各种版本的木马 该工具由msfpaylod和msfencodes的组成 生成木马是需要在本地监听,等待 ...

  8. 11.8 消除闪烁(2)(harib08h)

    ps:看书比较急,有错误的地方欢迎指正,不细致的地方我会持续的修改 11.8 消除闪烁(2)(harib08h) 11.7 消除闪烁(1)(harib08g)存在的问题: 鼠标放在计时器上会有 闪烁, ...

  9. 研发效能负责人/研发效能1号位 |DevOps负责人

    想要做好业务,老板们除了要梳理好公司级别的业务目标,公司的组织架构,还要搭个有产出的班子,也就是找负责人.建团队,让组织架构充实起来.搭班子最重要的就是把负责人找到,就是团队1号位的人.本文主要讲团队 ...

  10. Linux & 标准C语言学习 <DAY10>

    一.函数递归     函数自己调用自己的行为,叫做函数递归     递归是分治思想的一种具体实现,就是把一个复杂而庞大的问题,分解成若干个相似的小问题,解决所有小问题以解决大问题     如果函数递归 ...