You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将抓取gelbeseiten.de数据的Curl语句转换为C#代码的技术咨询

问题分析与解决方案

你遇到的核心问题是没有将curl命令中的--data-raw表单数据转换到C#代码中,同时对HttpWebRequest的一些基础配置也有误(比如默认请求方法是GET,而你需要的是POST请求)。下面是修正后的完整代码,以及关键细节的说明:

修正后的C#代码

using System;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        var url = "https://www.gelbeseiten.de/AjaxSuche";
        var boundary = "----WebKitFormBoundary2Ht3afv9RtrlWwk9";
        
        // 创建请求并设置基础属性
        var httpRequest = (HttpWebRequest)WebRequest.Create(url);
        httpRequest.Method = "POST"; // 必须设置为POST,curl默认是POST当有--data参数时
        httpRequest.ContentType = $"multipart/form-data; boundary={boundary}";
        httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36";
        httpRequest.Accept = "*/*";
        httpRequest.Referer = "https://www.gelbeseiten.de/";
        httpRequest.Headers.Add("pragma", "no-cache");
        httpRequest.Headers.Add("cache-control", "no-cache");
        httpRequest.Headers.Add("sec-ch-ua", "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"98\", \"Google Chrome\";v=\"98\"");
        httpRequest.Headers.Add("sec-ch-ua-mobile", "?0");
        httpRequest.Headers.Add("sec-ch-ua-platform", "\"Windows\"");
        httpRequest.Headers.Add("origin", "https://www.gelbeseiten.de");
        httpRequest.Headers.Add("sec-fetch-site", "same-origin");
        httpRequest.Headers.Add("sec-fetch-mode", "cors");
        httpRequest.Headers.Add("sec-fetch-dest", "empty");
        httpRequest.Headers.Add("accept-language", "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7");
        httpRequest.Headers.Add("cookie", "leverate=eyJjcmVhdGVkIjoxNjQ1MjU1NDE1Mjg5LCJsYXN0QWN0aW9uIjoxNjQ1MjU1NDE1Mjg5LCJyZWZlcnJlciI6IiJ9; leverate_session=1; _wwau=id=2429049831619900000&c=1&ti=1645255415&v=1; _wwas=1645255415; _wwao=; __cmpconsentx15760=CPUoXFgPUoXFgAfbgBDECDCgAAAAAAAAAAigAAAOxgCAA4AYIA3MB2IAAA; __cmpcpcx15760=__1__; __cmpcpc=__1__; __cmpiabli=__56_945_883_772_; __cmpcvcx15760=__s23_c7888_c24201_s24_c7853_c7957_c23722_U__; __cmpcvc=__s23_c7888_c24201_s24_c7853_c7957_c23722_U__; utag_main=v_id:017f10dd56000001b500915ce0d105073003206b00bd0$_sn:1$_ss:0$_st:1645257226251$ses_id:1645255415298%3Bexp-session$_pn:1%3Bexp-session; _wwav=ti=1645255415&pc=2&ec=60&le=1645255445&v=1");

        // 构建multipart表单数据,严格遵循格式要求
        var formData = $"--{boundary}\r\n" +
                       "Content-Disposition: form-data; name=\"umkreis\"\r\n\r\n" +
                       "-1\r\n" +
                       $"--{boundary}\r\n" +
                       "Content-Disposition: form-data; name=\"WAS\"\r\n\r\n" +
                       "EDV\r\n" +
                       $"--{boundary}\r\n" +
                       "Content-Disposition: form-data; name=\"WO\"\r\n\r\n" +
                       "Nürnberg\r\n" +
                       $"--{boundary}\r\n" +
                       "Content-Disposition: form-data; name=\"position\"\r\n\r\n" +
                       "51\r\n" +
                       $"--{boundary}\r\n" +
                       "Content-Disposition: form-data; name=\"anzahl\"\r\n\r\n" +
                       "10\r\n" +
                       $"--{boundary}\r\n" +
                       "Content-Disposition: form-data; name=\"sortierung\"\r\n\r\n" +
                       "relevanz\r\n" +
                       $"--{boundary}--\r\n";

        // 将表单数据写入请求流
        using (var streamWriter = new StreamWriter(httpRequest.GetRequestStream()))
        {
            streamWriter.Write(formData);
        }

        // 获取响应并处理,添加错误捕获便于排查问题
        try
        {
            var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                Console.WriteLine("响应内容:");
                Console.WriteLine(result);
            }
            Console.WriteLine($"状态码:{httpResponse.StatusCode}");
            httpResponse.Close();
        }
        catch (WebException ex)
        {
            if (ex.Response != null)
            {
                using (var errorResponse = (HttpWebResponse)ex.Response)
                using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                {
                    Console.WriteLine("错误响应:");
                    Console.WriteLine(reader.ReadToEnd());
                    Console.WriteLine($"错误状态码:{errorResponse.StatusCode}");
                }
            }
        }
    }
}

关键修正点说明

  • 请求方法设置:必须显式将Method设为POST,HttpWebRequest默认是GET,而curl在使用--data参数时会自动切换为POST请求。
  • ContentType设置:不能通过Headers添加,要直接赋值给httpRequest.ContentType属性,这是.NET类库的规范要求,避免潜在的格式错误。
  • 表单数据构建:严格按照multipart/form-data的格式拼接内容,每个字段之间用boundary分隔,最后以--{boundary}--结束,注意换行符必须使用\r\n才能符合HTTP协议规范。
  • 头信息优化:像UserAgent、Accept、Referer这类有对应属性的请求头,优先使用属性赋值而非Headers.Add,更符合.NET的API设计逻辑。
  • 错误处理:添加了WebException捕获逻辑,方便排查请求失败时的具体错误响应内容,帮助定位问题。

内容的提问来源于stack exchange,提问作者fass33443423

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:29:08