C#搞客户端的朋友们有没有这么一个困惑

2016-10-16 23:09:09 +08:00
 only0jac

这几天没事写了个小工具提升效率,结果,东西写出来了,只能在自己电脑用

发给朋友,首先 xp 不能用,换成 win7

再然后,不能运行,看报错,是我有行代码调用了系统 wininet.dll 这里,用它取 cookies

为毛用它?因为 c#自带的函数取 cookies 取的不全啊我滴哥!!!

真是日狗了,写了好几天,性高彩烈地发给别人,结果不能用,现在还没解决

搞 c#客户端的朋友们你们平时这样嘛?

8147 次点击
所在节点    .NET
82 条回复
lslqtz
2016-10-17 08:56:08 +08:00
@soratadori 我就是说 osu!的 C#源码,还有,我平板都有 30 帧。。 Z2***的 CPU 。
@hjc4869 我只能跑 30 帧...有点卡。
@murmur 我也在 3-4*挣扎,安利个 osu!上传 h 图的小工具给你。
https://www.osupink.org/ss/
https://osu.ppy.sh/ss/6342355
missdeer
2016-10-17 09:03:39 +08:00
上面说没有用.NET 做桌面开发的,是自己孤陋寡闻吧
微软现在自己的产品,往往都是.NET 和 Native C++混合开发的,你没看出来而已
开源项目也有一些比较有名的用.NET 开发的,比如 Keepass
allen9527
2016-10-17 09:05:40 +08:00
来这里问 C#问题,没结论的。
你调用的本地特定版本的库,所以有问题喽,原生的我记得是有办法取 cookie 的。。。
编译生成。 exe 不是打包。。。,有专门的生成安装包的方法
yamada
2016-10-17 09:07:59 +08:00
c#的 httpwebrequest 确实获取 cookie 会有缺失 ,老问题了,建议还是用 httpclient 替代,但条条框框设置的比较严格设置 http header 都要用强类型而不是字符串,而且有不能获取 content-length 的问题,反正坑很多
hjc4869
2016-10-17 09:13:42 +08:00
@lslqtz 用 bay trail 就好了, clover trail 连指令乱序发射都没有, GPU 也跟没有差不多,真不知道 intel 是怎么想的,连当时的 ARM 都不如(
only0jac
2016-10-17 09:14:54 +08:00
@wuethan 系统的 dll ,也不用找呀


@allen9527 原生可以取,但是取的不全


@yamada 我是获取 webbrowser 中的 cookies
yicong135
2016-10-17 09:19:44 +08:00
我建议你用.net 4.0 安装运行库会简单而且 xp 也可以用
dong3580
2016-10-17 09:22:17 +08:00
@only0jac
不要调系统自带的 dll ,就算掉也打包进去吧。 4.5 貌似对 xp 不友好,改到 4.0 。另外 44 楼的方法试试,我从来不用内置的系统级别的 api
jeremaihloo
2016-10-17 09:23:16 +08:00
.Net 自己的库你不用,非要用个什么 winnet.dll ,每个系统这东西版本不一样和.net 有什么关系,强行.net 的问题
这个社区对.Net 本来就不友好,你还来黑一下
这就好像你 WinXP 非要用用到 dwmapi.dll 的东西一样,肯定会出现问题的
说没有用.Net 做桌面开发的,那只是你不了解
至于说游戏问题的,不太了解,不太好发表意见,不过关于性能的应该都是 C++之类的,毕竟 C#确实要慢一点
ragnaroks
2016-10-17 09:37:15 +08:00
直接把那个 dll 拖到你应用程序目录...
以前 GTAV 的作弊器都是替换 GTAV 的 dll 做的
only0jac
2016-10-17 09:38:26 +08:00
@yicong135 谢谢,回去试一下,不过我用了一个 http 库,它需要 4.5.2 ,所以我也用的这个

@dong3580 我把系统 dll 放在运行目录也没用,我也不想用系统 api ,这不是自带的取不全 cookies 嘛

@jeremaihloo 能用的话我能不用吗,因为获取不全呀
only0jac
2016-10-17 09:39:10 +08:00
@ragnaroks 放在运行目录无效
MrSong0607
2016-10-17 09:40:33 +08:00
我是这么取 cookie 的,没遇到过啥问题,代码给 LZ 参考下
/// <summary>
///
/// </summary>
/// <param name="cc"></param>
/// <returns></returns>
public static List<Cookie> GetAllCookies(CookieContainer cc)
{
List<Cookie> lstCookies = new List<Cookie>();

Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField |
System.Reflection.BindingFlags.Instance, null, cc, new object[] { });

foreach (object pathList in table.Values)
{
SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField
| System.Reflection.BindingFlags.Instance, null, pathList, new object[] { });
foreach (CookieCollection colCookies in lstCookieCol.Values)
foreach (Cookie c in colCookies) lstCookies.Add(c);
}
return lstCookies;
}
chuxiwen
2016-10-17 09:41:58 +08:00
XP 早就 end of life 了啊 😂
zjddp
2016-10-17 10:32:50 +08:00
@lslqtz 话说 osu 的源码曾经泄露过吧
ipwx
2016-10-17 11:49:42 +08:00
用微软家的开发工具,就算是 VC++,最保险的方法也还是给对方塞一个 vcredist.exe 让它把库装上再说,何况是 .net 。。。我就没见过几个程序试图把 DLL 打包进去变成绿色版的(而且效果还不一定好)。
only0jac
2016-10-17 12:12:39 +08:00
@MrSong0607 多谢,我的需求是获取 webBrowser 中的 cookies ,根据域名取 cookies ,这个好像不太行
lslqtz
2016-10-17 13:01:59 +08:00
@zjddp 我手头就是那个 编译成功过
MrSong0607
2016-10-17 13:02:28 +08:00
.net 框架有个 BUG ,根据域名取 cookie 的时候有些域名是取不到的,好像是他们判断域名的条件那里有问题,这个是底层的问题,要做一点小操作,然后再按域名取就可以全部取到了
/// <summary>
/// this is a hackfix for microsoft bug, where cookies are not shared between www.domain.com and domain.com
/// </summary>
/// <param name="cc"></param>
public static void ImproveCookieContainer(ref CookieContainer cc)
{
Hashtable table = (Hashtable)cc.GetType().InvokeMember(
"m_domainTable",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance,
null, cc, new object[] { });
var comparerPreperty = table.GetType().GetField("_keycomparer",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance);
if (comparerPreperty != null)
{
comparerPreperty.SetValue(table, new DomainComparer());
}
}
yejinmo
2016-10-17 13:07:52 +08:00
xp 最高支持.net4.0 ,楼主 4.5.2 怎么用啊。。。

自己以前写的爬虫一直都没问题啊。。

string cookie = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://url");
request.CookieContainer = new CookieContainer();
request.Referer = "http://url";
request.Accept = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
request.KeepAlive = true;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "GET";
request.AllowAutoRedirect = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
cookie = response.Headers["Set-Cookie"];
myStreamReader.Close();
myResponseStream.Close();

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX