Bagikan melalui


Fungsi WinHttpAddRequestHeaders (winhttp.h)

Fungsi WinHttpAddRequestHeaders menambahkan satu atau beberapa header permintaan HTTP ke handel permintaan HTTP.

Sintaks

WINHTTPAPI BOOL WinHttpAddRequestHeaders(
  [in] HINTERNET hRequest,
  [in] LPCWSTR   lpszHeaders,
  [in] DWORD     dwHeadersLength,
  [in] DWORD     dwModifiers
);

Parameter

[in] hRequest

Handel HINTERNET yang dikembalikan oleh panggilan ke fungsi WinHttpOpenRequest .

[in] lpszHeaders

Penunjuk ke variabel string yang berisi header untuk ditambahkan ke permintaan. Setiap header kecuali yang terakhir harus dihentikan oleh umpan kembali/baris pengangkutan (CR/LF).

[in] dwHeadersLength

Nilai bilangan bulat panjang yang tidak ditandatangani yang berisi panjang, dalam karakter, pwszHeaders. Jika parameter ini adalah -1L, fungsi mengasumsikan bahwa pwszHeaders dihentikan nol (ASCIIZ), dan panjangnya dihitung.

[in] dwModifiers

Nilai bilangan bulat panjang yang tidak ditandatangani yang berisi bendera yang digunakan untuk memodifikasi semantik fungsi ini. Dapat berupa satu atau beberapa bendera berikut.

Nilai Makna
WINHTTP_ADDREQ_FLAG_ADD
Menambahkan header jika tidak ada. Digunakan dengan WINHTTP_ADDREQ_FLAG_REPLACE.
WINHTTP_ADDREQ_FLAG_ADD_IF_NEW
Menambahkan header hanya jika belum ada; jika tidak, kesalahan dikembalikan.
WINHTTP_ADDREQ_FLAG_COALESCE
Menggabungkan header dengan nama yang sama.
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
Menggabungkan header dengan nama yang sama menggunakan koma. Misalnya, menambahkan "Terima: teks/*" diikuti dengan "Terima: audio/*" dengan bendera ini menghasilkan satu header "Terima: teks/*, audio/*". Ini menyebabkan header pertama yang ditemukan digabungkan. Aplikasi panggilan harus memastikan skema kohesif sehubungan dengan header yang digabungkan dan terpisah.
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON
Menggabungkan header dengan nama yang sama menggunakan titik koma.
WINHTTP_ADDREQ_FLAG_REPLACE
Mengganti atau menghapus header. Jika nilai header kosong dan header ditemukan, header akan dihapus. Jika nilainya tidak kosong, maka akan diganti.

Nilai kembali

Mengembalikan TRUE jika berhasil, atau FALSE sebaliknya. Untuk informasi kesalahan yang diperluas, hubungi GetLastError. Di antara kode kesalahan yang dikembalikan adalah sebagai berikut.

Kode Kesalahan Deskripsi
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
Operasi yang diminta tidak dapat dilakukan karena handel yang disediakan tidak dalam keadaan yang benar.
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Jenis handel yang disediakan salah untuk operasi ini.
ERROR_WINHTTP_INTERNAL_ERROR
Terjadi kesalah internal.
ERROR_NOT_ENOUGH_MEMORY
Memori tidak cukup tersedia untuk menyelesaikan operasi yang diminta.

Keterangan

Header ditransfer di seluruh pengalihan. Ini bisa menjadi masalah keamanan. Untuk menghindari header yang ditransfer saat pengalihan terjadi, gunakan panggilan balik WINHTTP_STATUS_CALLBACK untuk memperbaiki header tertentu saat pengalihan terjadi.

Bahkan ketika WinHTTP digunakan dalam mode asinkron (yaitu, ketika WINHTTP_FLAG_ASYNC telah diatur di WinHttpOpen), fungsi ini beroperasi secara sinkron. Nilai yang dikembalikan menunjukkan keberhasilan atau kegagalan. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Fungsi WinHttpAddRequestHeaders menambahkan header format bebas tambahan ke handel permintaan HTTP dan dimaksudkan untuk digunakan oleh klien canggih yang memerlukan kontrol terperinci atas permintaan yang tepat yang dikirim ke server HTTP.

Nama dan nilai header permintaan yang ditambahkan dengan fungsi ini divalidasi. Header harus terbentuk dengan baik. Untuk informasi selengkapnya tentang header HTTP yang valid, lihat RFC 2616. Jika header yang tidak valid digunakan, fungsi ini gagal dan GetLastError mengembalikan ERROR_INVALID_PARAMETER. Header tidak valid tidak ditambahkan.

Jika Anda mengirim header Permintaan Tanggal: , Anda bisa menggunakan fungsi WinHttpTimeFromSystemTime untuk membuat struktur header.

Untuk WinHttpAddRequestHeaders dasar, aplikasi dapat meneruskan beberapa header dalam satu buffer.

Aplikasi juga bisa menggunakan WinHttpSendRequest untuk menambahkan header tambahan ke handel permintaan HTTP sebelum mengirim permintaan.

Catatan Untuk informasi selengkapnya, lihat Persyaratan Run-Time.
 

Contoh

Contoh kode berikut menyertakan header If-Modified-Since dalam permintaan. Header respons ditafsirkan untuk menentukan apakah dokumen target telah diperbarui.


  DWORD dwSize = sizeof(DWORD);
  DWORD dwStatusCode = 0;
  BOOL  bResults = FALSE;
  HINTERNET hSession = NULL,
        hConnect = NULL,
        hRequest = NULL;

  // Use WinHttpOpen to obtain a session handle.
  hSession = WinHttpOpen( L"A WinHTTP Example Program/1.0", 
                          WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                          WINHTTP_NO_PROXY_NAME, 
                          WINHTTP_NO_PROXY_BYPASS,
                          0 );

  // Specify an HTTP server.
  if( hSession )
    hConnect = WinHttpConnect( hSession,
                               L"www.microsoft.com",
                               INTERNET_DEFAULT_HTTP_PORT,
                               0 );

  // Create an HTTP Request handle.
  if( hConnect )
    hRequest = WinHttpOpenRequest( hConnect,
                                   L"GET",
                                   NULL, 
                                   NULL,
                                   WINHTTP_NO_REFERER, 
                                   WINHTTP_DEFAULT_ACCEPT_TYPES,
                                   0 );

  // Add a request header.
  if( hRequest )
    bResults = WinHttpAddRequestHeaders( hRequest, 
                 L"If-Modified-Since: Mon, 20 Nov 2000 20:00:00 GMT",
                                         (ULONG)-1L,
                                         WINHTTP_ADDREQ_FLAG_ADD );

  // Send a Request.
  if( bResults ) 
    bResults = WinHttpSendRequest( hRequest, 
                                   WINHTTP_NO_ADDITIONAL_HEADERS,
                                   0,
                                   WINHTTP_NO_REQUEST_DATA,
                                   0, 
                                   0,
                                   0 );

  // End the request.
  if( bResults )
    bResults = WinHttpReceiveResponse( hRequest, NULL);

  // Use WinHttpQueryHeaders to obtain the header buffer.
  if( bResults )
    bResults = WinHttpQueryHeaders( hRequest, 
                WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER,
                                    NULL, 
                                    &dwStatusCode,
                                    &dwSize,
                                    WINHTTP_NO_HEADER_INDEX );

  // Based on the status code, determine whether 
  // the document was recently updated.
  if( bResults )
  {
    if( dwStatusCode == 304 ) 
      printf( "Document has not been updated.\n" );
    else if( dwStatusCode == 200 ) 
      printf( "Document has been updated.\n" );
    else 
      printf( "Status code = %u.\n",dwStatusCode );
  }

  // Report any errors.
  if( !bResults )
    printf( "Error %d has occurred.\n", GetLastError( ) );

  // Close open handles.
  if( hRequest ) WinHttpCloseHandle( hRequest );
  if( hConnect ) WinHttpCloseHandle( hConnect );
  if( hSession ) WinHttpCloseHandle( hSession );

Persyaratan

   
Klien minimum yang didukung Windows XP, Windows 2000 Professional dengan SP3 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003, Windows 2000 Server dengan SP3 [hanya aplikasi desktop]
Target Platform Windows
Header winhttp.h
Pustaka Winhttp.lib
DLL Winhttp.dll
Redistribusi WinHTTP 5.0 dan Internet Explorer 5.01 atau yang lebih baru pada Windows XP dan Windows 2000.

Lihat juga

Tentang Microsoft Windows HTTP Services (WinHTTP)

Versi WinHTTP

WinHttpOpenRequest

WinHttpsendRequest