吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 383|回复: 23
收起左侧

[求助] 关于 C# HttpClient 的疑惑

[复制链接]
JoeYellowMing 发表于 2024-11-13 20:06
[C#] 纯文本查看 复制代码
_logger.LogInformation("Checking QR code status...");
do
{
    await Task.Delay(800);
    timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
    var statusResponse = await client.GetStringAsync($"{BaseUrl}/qrCode/getStatus.htl?ts={timestamp}&uuid={uuid}");
    if (!int.TryParse(statusResponse, out statusCode))
    {
        _logger.LogError("Failed to parse status code. As the Response is {statusResponse}", statusResponse);
    }

    switch (statusCode)
    {
        case 3:
            _logger.LogWarning("QR code expired.");
            break;
        case 2:
            _logger.LogInformation("QR code scanned.");
            break;
    }
} while (statusCode != 1);
_logger.LogInformation("QR code login successful.");
await PostLoginAsync(uuid, executionValue);
Cookie ticketCookie = CookieContainer.GetAllCookies()
    .FirstOrDefault(c => c.Name == "MOD_AUTH_CAS")
    ?? throw new Exception("Failed to get ticket cookie.");
string ticket = ticketCookie.Value
                .AsSpan(9).ToString();
await client.GetAsync($"{PortalUrl}/index.do?ticket={ticket}");
_ = cookieContainer.GetAllCookies().First(c => c.Name == "_WEU");
return true;

全文在这里,设计得不太好,有啥问题请指出来


我设计了上方代码以实现校园网 cookie 的获取,但实际上该代码在登录成功后会经历两次重定向,而我在写的时候发现始终无法获得重定向的信息,httpclient 也不能获取到我所需的cookie(即使在默认 redirect=true 的情况下)。这样的情况究竟是什么原因造成的?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

啊笨 发表于 2024-11-13 20:49
C#不懂,但前端里面也有过这种问题,是不是有个叫 跨域 的东西。

本人新手,准备学前端。
zgcwkj 发表于 2024-11-13 20:51
重定向信息在响应头那里,你取一下30x的状态码,然后看一下响应头数据,就能知道重定向到什么位置了
 楼主| JoeYellowMing 发表于 2024-11-13 21:02
啊笨 发表于 2024-11-13 20:49
C#不懂,但前端里面也有过这种问题,是不是有个叫 跨域 的东西。

本人新手,准备学前端。

这个很有可能,只是我更迷惑了,想不到该怎么办了
 楼主| JoeYellowMing 发表于 2024-11-13 21:13
本帖最后由 JoeYellowMing 于 2024-11-13 21:14 编辑
zgcwkj 发表于 2024-11-13 20:51
重定向信息在响应头那里,你取一下30x的状态码,然后看一下响应头数据,就能知道重定向到什么位置了

哦抱歉给了您错误的信息,我这里post的信息返回了200,响应头里没看到东西(我对 web 不熟,描述上可能不太对)总之拿到的实际是下图这个
starktian 发表于 2024-11-13 21:13
[C#] 纯文本查看 复制代码
using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

class Program
{
    private static readonly HttpClient client = new HttpClient();

    static async Task Main(string[] args)
    {
        // 设置初始请求的URL
        string url = "https://example.com";

        // 调用方法请求页面
        await FetchPageAsync(url);
    }

    static async Task FetchPageAsync(string url)
    {
        // 发起初始请求
        var response = await client.GetAsync(url);

        // 检查响应状态码
        if (response.StatusCode == HttpStatusCode.NotModified)
        {
            Console.WriteLine("页面未更改 (304),需要重定向或重新请求。");

            // 根据具体业务逻辑执行后续处理,比如重新请求不同的URL
            // 这里可以定义是否重定向到另一个地址,或进行其他处理
        }
        else if (response.StatusCode == HttpStatusCode.Redirect ||
                 response.StatusCode == HttpStatusCode.MovedPermanently)
        {
            // 处理重定向,获取新地址并重新请求
            var redirectUrl = response.Headers.Location?.ToString();
            if (!string.IsNullOrEmpty(redirectUrl))
            {
                Console.WriteLine($"重定向到新地址: {redirectUrl}");
                await FetchPageAsync(redirectUrl);  // 递归调用重新请求新地址
            }
        }
        else if (response.IsSuccessStatusCode)
        {
            // 处理成功的响应
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine("页面内容:" + content);
        }
        else
        {
            Console.WriteLine($"请求失败,状态码: {response.StatusCode}");
        }
    }
}


使用response.StatusCode来判断状态,然后进行处理。
 楼主| JoeYellowMing 发表于 2024-11-13 21:22
starktian 发表于 2024-11-13 21:13
[mw_shl_code=csharp,true]using System;
using System.Net;
using System.Net.Http;

抱歉我描述有误,我重新查了一下发现网页抓的和 C# 获取的状态不一样。代码在本该第一次重定向就200了,根本没法继续执行,在上面我截了request的图,同时IsSuccessStatusCode=True
starktian 发表于 2024-11-13 21:37
我之前抓取页面遇到过内页是通过Javascript跳转的其他页面的,抓取时返回200,但是没有执行页面里的javascript代码就不会跳转。
 楼主| JoeYellowMing 发表于 2024-11-13 21:56
starktian 发表于 2024-11-13 21:37
我之前抓取页面遇到过内页是通过Javascript跳转的其他页面的,抓取时返回200,但是没有执行页面里的javascr ...


我这个与您的情况好像不太一样?
starktian 发表于 2024-11-13 22:00
JoeYellowMing 发表于 2024-11-13 21:56
我这个与您的情况好像不太一样?

检测到302,然后获取Location再次请求呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表