Win32 API 日本語リファレンス
ホームNetworking.WinHttp › WinHttpOpenRequest

WinHttpOpenRequest

関数
HTTP要求ハンドルを作成する。
DLLWINHTTP.dll呼出規約winapiSetLastErrorあり対応OSWindows XP 以降

シグネチャ

// WINHTTP.dll
#include <windows.h>

void* WinHttpOpenRequest(
    void* hConnect,
    LPCWSTR pwszVerb,
    LPCWSTR pwszObjectName,
    LPCWSTR pwszVersion,
    LPCWSTR pwszReferrer,
    LPCWSTR* ppwszAcceptTypes,
    WINHTTP_OPEN_REQUEST_FLAGS dwFlags
);

パラメーター

名前方向
hConnectvoid*inout
pwszVerbLPCWSTRin
pwszObjectNameLPCWSTRin
pwszVersionLPCWSTRin
pwszReferrerLPCWSTRin
ppwszAcceptTypesLPCWSTR*in
dwFlagsWINHTTP_OPEN_REQUEST_FLAGSin

戻り値の型: void*

各言語での呼び出し定義

// WINHTTP.dll
#include <windows.h>

void* WinHttpOpenRequest(
    void* hConnect,
    LPCWSTR pwszVerb,
    LPCWSTR pwszObjectName,
    LPCWSTR pwszVersion,
    LPCWSTR pwszReferrer,
    LPCWSTR* ppwszAcceptTypes,
    WINHTTP_OPEN_REQUEST_FLAGS dwFlags
);
[DllImport("WINHTTP.dll", SetLastError = true, ExactSpelling = true)]
static extern IntPtr WinHttpOpenRequest(
    IntPtr hConnect,   // void* in/out
    [MarshalAs(UnmanagedType.LPWStr)] string pwszVerb,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string pwszObjectName,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string pwszVersion,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string pwszReferrer,   // LPCWSTR
    IntPtr ppwszAcceptTypes,   // LPCWSTR*
    uint dwFlags   // WINHTTP_OPEN_REQUEST_FLAGS
);
<DllImport("WINHTTP.dll", SetLastError:=True, ExactSpelling:=True)>
Public Shared Function WinHttpOpenRequest(
    hConnect As IntPtr,   ' void* in/out
    <MarshalAs(UnmanagedType.LPWStr)> pwszVerb As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> pwszObjectName As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> pwszVersion As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> pwszReferrer As String,   ' LPCWSTR
    ppwszAcceptTypes As IntPtr,   ' LPCWSTR*
    dwFlags As UInteger   ' WINHTTP_OPEN_REQUEST_FLAGS
) As IntPtr
End Function
' hConnect : void* in/out
' pwszVerb : LPCWSTR
' pwszObjectName : LPCWSTR
' pwszVersion : LPCWSTR
' pwszReferrer : LPCWSTR
' ppwszAcceptTypes : LPCWSTR*
' dwFlags : WINHTTP_OPEN_REQUEST_FLAGS
Declare PtrSafe Function WinHttpOpenRequest Lib "winhttp" ( _
    ByVal hConnect As LongPtr, _
    ByVal pwszVerb As LongPtr, _
    ByVal pwszObjectName As LongPtr, _
    ByVal pwszVersion As LongPtr, _
    ByVal pwszReferrer As LongPtr, _
    ByVal ppwszAcceptTypes As LongPtr, _
    ByVal dwFlags As Long) As LongPtr
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

WinHttpOpenRequest = ctypes.windll.winhttp.WinHttpOpenRequest
WinHttpOpenRequest.restype = ctypes.c_void_p
WinHttpOpenRequest.argtypes = [
    ctypes.POINTER(None),  # hConnect : void* in/out
    wintypes.LPCWSTR,  # pwszVerb : LPCWSTR
    wintypes.LPCWSTR,  # pwszObjectName : LPCWSTR
    wintypes.LPCWSTR,  # pwszVersion : LPCWSTR
    wintypes.LPCWSTR,  # pwszReferrer : LPCWSTR
    ctypes.c_void_p,  # ppwszAcceptTypes : LPCWSTR*
    wintypes.DWORD,  # dwFlags : WINHTTP_OPEN_REQUEST_FLAGS
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('WINHTTP.dll')
WinHttpOpenRequest = Fiddle::Function.new(
  lib['WinHttpOpenRequest'],
  [
    Fiddle::TYPE_VOIDP,  # hConnect : void* in/out
    Fiddle::TYPE_VOIDP,  # pwszVerb : LPCWSTR
    Fiddle::TYPE_VOIDP,  # pwszObjectName : LPCWSTR
    Fiddle::TYPE_VOIDP,  # pwszVersion : LPCWSTR
    Fiddle::TYPE_VOIDP,  # pwszReferrer : LPCWSTR
    Fiddle::TYPE_VOIDP,  # ppwszAcceptTypes : LPCWSTR*
    -Fiddle::TYPE_INT,  # dwFlags : WINHTTP_OPEN_REQUEST_FLAGS
  ],
  Fiddle::TYPE_VOIDP)
#[link(name = "winhttp")]
extern "system" {
    fn WinHttpOpenRequest(
        hConnect: *mut (),  // void* in/out
        pwszVerb: *const u16,  // LPCWSTR
        pwszObjectName: *const u16,  // LPCWSTR
        pwszVersion: *const u16,  // LPCWSTR
        pwszReferrer: *const u16,  // LPCWSTR
        ppwszAcceptTypes: *const *const u16,  // LPCWSTR*
        dwFlags: u32  // WINHTTP_OPEN_REQUEST_FLAGS
    ) -> *mut ();
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("WINHTTP.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpenRequest(IntPtr hConnect, [MarshalAs(UnmanagedType.LPWStr)] string pwszVerb, [MarshalAs(UnmanagedType.LPWStr)] string pwszObjectName, [MarshalAs(UnmanagedType.LPWStr)] string pwszVersion, [MarshalAs(UnmanagedType.LPWStr)] string pwszReferrer, IntPtr ppwszAcceptTypes, uint dwFlags);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WINHTTP_WinHttpOpenRequest' -Namespace Win32 -PassThru
# $api::WinHttpOpenRequest(hConnect, pwszVerb, pwszObjectName, pwszVersion, pwszReferrer, ppwszAcceptTypes, dwFlags)
#uselib "WINHTTP.dll"
#func global WinHttpOpenRequest "WinHttpOpenRequest" sptr, sptr, sptr, sptr, sptr, sptr, sptr
; WinHttpOpenRequest hConnect, pwszVerb, pwszObjectName, pwszVersion, pwszReferrer, varptr(ppwszAcceptTypes), dwFlags   ; 戻り値は stat
; hConnect : void* in/out -> "sptr"
; pwszVerb : LPCWSTR -> "sptr"
; pwszObjectName : LPCWSTR -> "sptr"
; pwszVersion : LPCWSTR -> "sptr"
; pwszReferrer : LPCWSTR -> "sptr"
; ppwszAcceptTypes : LPCWSTR* -> "sptr"
; dwFlags : WINHTTP_OPEN_REQUEST_FLAGS -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "WINHTTP.dll"
#cfunc global WinHttpOpenRequest "WinHttpOpenRequest" sptr, wstr, wstr, wstr, wstr, var, int
; res = WinHttpOpenRequest(hConnect, pwszVerb, pwszObjectName, pwszVersion, pwszReferrer, ppwszAcceptTypes, dwFlags)
; hConnect : void* in/out -> "sptr"
; pwszVerb : LPCWSTR -> "wstr"
; pwszObjectName : LPCWSTR -> "wstr"
; pwszVersion : LPCWSTR -> "wstr"
; pwszReferrer : LPCWSTR -> "wstr"
; ppwszAcceptTypes : LPCWSTR* -> "var"
; dwFlags : WINHTTP_OPEN_REQUEST_FLAGS -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; void* WinHttpOpenRequest(void* hConnect, LPCWSTR pwszVerb, LPCWSTR pwszObjectName, LPCWSTR pwszVersion, LPCWSTR pwszReferrer, LPCWSTR* ppwszAcceptTypes, WINHTTP_OPEN_REQUEST_FLAGS dwFlags)
#uselib "WINHTTP.dll"
#cfunc global WinHttpOpenRequest "WinHttpOpenRequest" intptr, wstr, wstr, wstr, wstr, var, int
; res = WinHttpOpenRequest(hConnect, pwszVerb, pwszObjectName, pwszVersion, pwszReferrer, ppwszAcceptTypes, dwFlags)
; hConnect : void* in/out -> "intptr"
; pwszVerb : LPCWSTR -> "wstr"
; pwszObjectName : LPCWSTR -> "wstr"
; pwszVersion : LPCWSTR -> "wstr"
; pwszReferrer : LPCWSTR -> "wstr"
; ppwszAcceptTypes : LPCWSTR* -> "var"
; dwFlags : WINHTTP_OPEN_REQUEST_FLAGS -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	winhttp = windows.NewLazySystemDLL("WINHTTP.dll")
	procWinHttpOpenRequest = winhttp.NewProc("WinHttpOpenRequest")
)

// hConnect (void* in/out), pwszVerb (LPCWSTR), pwszObjectName (LPCWSTR), pwszVersion (LPCWSTR), pwszReferrer (LPCWSTR), ppwszAcceptTypes (LPCWSTR*), dwFlags (WINHTTP_OPEN_REQUEST_FLAGS)
r1, _, err := procWinHttpOpenRequest.Call(
	uintptr(hConnect),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszVerb))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszObjectName))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszVersion))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszReferrer))),
	uintptr(ppwszAcceptTypes),
	uintptr(dwFlags),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // void*
function WinHttpOpenRequest(
  hConnect: Pointer;   // void* in/out
  pwszVerb: PWideChar;   // LPCWSTR
  pwszObjectName: PWideChar;   // LPCWSTR
  pwszVersion: PWideChar;   // LPCWSTR
  pwszReferrer: PWideChar;   // LPCWSTR
  ppwszAcceptTypes: PPWideChar;   // LPCWSTR*
  dwFlags: DWORD   // WINHTTP_OPEN_REQUEST_FLAGS
): Pointer; stdcall;
  external 'WINHTTP.dll' name 'WinHttpOpenRequest';
result := DllCall("WINHTTP\WinHttpOpenRequest"
    , "Ptr", hConnect   ; void* in/out
    , "WStr", pwszVerb   ; LPCWSTR
    , "WStr", pwszObjectName   ; LPCWSTR
    , "WStr", pwszVersion   ; LPCWSTR
    , "WStr", pwszReferrer   ; LPCWSTR
    , "Ptr", ppwszAcceptTypes   ; LPCWSTR*
    , "UInt", dwFlags   ; WINHTTP_OPEN_REQUEST_FLAGS
    , "Ptr")   ; return: void*
●WinHttpOpenRequest(hConnect, pwszVerb, pwszObjectName, pwszVersion, pwszReferrer, ppwszAcceptTypes, dwFlags) = DLL("WINHTTP.dll", "void* WinHttpOpenRequest(void*, char*, char*, char*, char*, void*, dword)")
# 呼び出し: WinHttpOpenRequest(hConnect, pwszVerb, pwszObjectName, pwszVersion, pwszReferrer, ppwszAcceptTypes, dwFlags)
# hConnect : void* in/out -> "void*"
# pwszVerb : LPCWSTR -> "char*"
# pwszObjectName : LPCWSTR -> "char*"
# pwszVersion : LPCWSTR -> "char*"
# pwszReferrer : LPCWSTR -> "char*"
# ppwszAcceptTypes : LPCWSTR* -> "void*"
# dwFlags : WINHTTP_OPEN_REQUEST_FLAGS -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。