delphi7使用idhttp获取https的页面代码

delphi7使用idhttp获取https的页面代码

procedure TForm1.Button1Click(Sender: TObject);
var url:string;
response:TStringStream;
error:string;
begin
  response:=TStringStream.Create('');
  IdHTTP1.IOHandler := IdSSLIOHandlerSocket1;
  IdHTTP1.HandleRedirects:=false;
  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv3;
  url:='https://passport.jd.com/new/login.aspx';
  try
    IdHTTP1.Get(url);
  except
    on E: Exception do
      error:=E.Message;
  end;
  url:= IdHTTP1.Response.Location;
  if error='HTTP/1.1 302 Found' then
  begin
    IdHTTP1.Get(url,response);
    Memo1.Text := response.DataString;
  end;


  response.Free;
end;

需要把下面两个dll和exe放在一起

注意:不要在delphi ide中按F9运行, 这样(try except)异常会被IDE的调试器捕获,当然可以设置忽略异常,把异常传递给程序,不过并不推荐这样做,会影响下次调试。

看效果直接双击exe即可。

std::string 常用函数

std::string 常用函数

string replace(const string & str , const string & src , const string & dest )
{
        string ret;
       
        string:: size_type pos_begin = 0;
        string:: size_type pos       = str.find( src);
        while (pos != string::npos)
       {
              cout << "replacexxx:" << pos_begin <<" " << pos <<"\n";
              ret.append( str.data() + pos_begin, pos - pos_begin);
              ret += dest;
              pos_begin = pos + 1;
              pos       = str.find( src, pos_begin);
       }
        if (pos_begin < str.length())
       {
              ret.append( str.begin() + pos_begin, str.end());
       }
        return ret;
}

int split(const string & str , vector <string >& ret_, string sep = ",")
{
        if ( str.empty())
       {
               return 0;
       }
       
        string tmp;
        string:: size_type pos_begin = str.find_first_not_of( sep);
        string:: size_type comma_pos = 0;
       
        while (pos_begin != string::npos)
       {
              comma_pos = str.find( sep, pos_begin);
               if (comma_pos != string::npos)
              {
                     tmp = str.substr(pos_begin, comma_pos - pos_begin);
                     pos_begin = comma_pos + sep.length();
              }
               else
              {
                     tmp = str.substr(pos_begin);
                     pos_begin = comma_pos;
              }
              
               if (!tmp.empty())
              {
                      ret_.push_back(tmp);
                     tmp = "";
              }
       }
        return 0;
}


string trim(const string & str )
{
        string:: size_type pos = str.find_first_not_of( ' ');
        if (pos == string::npos)
       {
               return str;
       }
        string:: size_type pos2 = str.find_last_not_of( ' ');
        if (pos2 != string::npos)
       {
               return str.substr(pos, pos2 - pos + 1);
       }
        return str.substr(pos);
}

VC为RichTextBox添加右键菜单

VC为RichTextBox添加右键菜单

private void InitRichTextBoxContextMenu(RichTextBox textBox)
{
    //创建剪切子菜单
    var cutMenuItem = new MenuItem( "剪切");
    cutMenuItem.Click += (sender, eventArgs) => textBox.Cut();

    //创建复制子菜单
    var copyMenuItem = new MenuItem( "复制");
    copyMenuItem.Click += (sender, eventArgs) => textBox.Copy();

    //创建粘贴子菜单
    var pasteMenuItem = new MenuItem( "粘贴");
    pasteMenuItem.Click += (sender, eventArgs) => textBox.Paste();

    //创建右键菜单并将子菜单加入到右键菜单中
    var contextMenu = new ContextMenu();
    contextMenu.MenuItems.Add(cutMenuItem);
    contextMenu.MenuItems.Add(copyMenuItem);
    contextMenu.MenuItems.Add(pasteMenuItem);

    textBox.ContextMenu = contextMenu; //为richtextbox设置菜单
}

VC 获取跳转后的网址

VC 获取跳转后的网址

BOOL GetRedirectUrl(std::string strUrl , string &redirectUrl )
{

       
    //定义变量 
    HINTERNET hInet = NULL; //打开internet连接handle 
    HINTERNET hConnect = NULL; //HTTP连接 
    HINTERNET hRequestHead = NULL; //HTTP Request 
    HINTERNET hRequestGet = NULL; //HTTP Request 
    HANDLE hFileWrite = NULL; //写文件的句柄 
    char* pBuf = NULL; //缓冲区 
    DWORD dwRequestTryTimes = MAX_DOWNLOAD_REQUEST_TIME; //尝试请求的次数 
    DWORD dwDownBytes = 0; //每次下载的大小 
    DWORD dwDownFileTotalBytes = 0; //下载的文件总大小 
    DWORD dwWriteBytes = 0; //写入文件的大小 
    char bufQueryInfo[ LEN_OF_BUFFER_FOR_QUERYINFO] = {0}; //用来查询信息的buffer 
    DWORD dwBufQueryInfoSize = sizeof(bufQueryInfo); 
    DWORD dwStatusCode = 0; 
    DWORD dwContentLen = 0; 
    DWORD dwSizeDW = sizeof( DWORD); 
       
    //分割URL 
    CHAR pszHostName[ INTERNET_MAX_HOST_NAME_LENGTH] = {0}; 
    CHAR pszUserName[ INTERNET_MAX_USER_NAME_LENGTH] = {0}; 
    CHAR pszPassword[ INTERNET_MAX_PASSWORD_LENGTH] = {0}; 
    CHAR pszURLPath[ INTERNET_MAX_URL_LENGTH] = {0}; 
    CHAR szURL[INTERNET_MAX_URL_LENGTH] = {0}; 
    URL_COMPONENTSA urlComponents = {0}; 
    urlComponents.dwStructSize = sizeof( URL_COMPONENTSA); 
    urlComponents.lpszHostName = pszHostName; 
    urlComponents.dwHostNameLength = INTERNET_MAX_HOST_NAME_LENGTH; 
    urlComponents.lpszUserName = pszUserName; 
    urlComponents.dwUserNameLength = INTERNET_MAX_USER_NAME_LENGTH; 
    urlComponents.lpszPassword = pszPassword; 
    urlComponents.dwPasswordLength = INTERNET_MAX_PASSWORD_LENGTH; 
    urlComponents.lpszUrlPath = pszURLPath; 
    urlComponents.dwUrlPathLength = INTERNET_MAX_URL_LENGTH; 
       
    BOOL bRet = InternetCrackUrlA( strUrl.c_str(), 0, NULL, &urlComponents); 
    bRet = (bRet && urlComponents.nScheme == INTERNET_SERVICE_HTTP); 
    if (!bRet) 
    { 
        goto _END_OF_DOWNLOADURL; 
    } 
       
    //打开一个internet连接 
    hInet = InternetOpenA( DOWNHELPER_AGENTNAME, INTERNET_OPEN_TYPE_PRECONFIG , NULL, NULL , NULL ); 
    if (!hInet) 
    { 
        bRet = FALSE; 
        goto _END_OF_DOWNLOADURL; 
    } 
       
    //打开HTTP连接 
    hConnect = InternetConnectA(hInet, pszHostName, urlComponents.nPort, pszUserName, pszPassword, INTERNET_SERVICE_HTTP , 0, NULL ); 
    if (!hConnect) 
    { 
        bRet = FALSE; 
        goto _END_OF_DOWNLOADURL; 
    } 
       
    //创建HTTP request句柄 
    if (urlComponents.dwUrlPathLength !=  0) 
        strcpy(szURL, urlComponents.lpszUrlPath); 
    else 
        strcpy(szURL, "/"); 
       
    //请求HEAD,通过HEAD获得文件大小及类型进行校验 
    hRequestHead = HttpOpenRequestA(hConnect, "HEAD", szURL, "HTTP/1.1" , "" , NULL , INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_AUTO_REDIRECT , 0); 


    bRet = FALSE; 
     dwStatusCode = 0; 
     dwSizeDW = sizeof(DWORD); 
 
        //发送请求 
        bRet = HttpSendRequestA(hRequestHead, NULL, 0, NULL, 0); 
        if (!bRet) 
        { 
                     bRet = FALSE;
                      goto _END_OF_DOWNLOADURL;
   
        } 
        else 
        { 
            //判断HTTP返回的状态码 
            dwStatusCode = 0; 
            dwSizeDW = sizeof( DWORD); 
            bRet = HttpQueryInfo(hRequestHead, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, &dwStatusCode, &dwSizeDW, NULL ); 
            if (bRet) 
            { 
                //检查状态码 
                if ( HTTP_STATUS_OK == dwStatusCode) //200 OK 
                { 
                                  bRet = FALSE;
                                   goto _END_OF_DOWNLOADURL;
                   
                } 
                            else if (302 == dwStatusCode)
                           {
                                   //GetStatusCode(hRequest);
                                   TCHAR szBuffer[ INTERNET_MAX_URL_LENGTH] = {0};
                                   DWORD dwLen = sizeof(szBuffer);
                                  
                                   // 获取HTTP请求信息(HTTP_QUERY_LOCATION获取的绝对URL在Location应答头)
                                   BOOL bRet = HttpQueryInfo(hRequestHead, HTTP_QUERY_LOCATION, szBuffer, &dwLen, NULL );
                                  
                                   redirectUrl = szBuffer;
                                   goto _END_OF_DOWNLOADURL;
                                  bRet = TRUE;
                           }
                else 
                { 
                    bRet = FALSE;  
                } 
            } 
        }

               //清理 
_END_OF_DOWNLOADURL: 
               if ( INVALID_HANDLE_VALUE != hFileWrite) 
                     CloseHandle(hFileWrite); 
               if (pBuf) 
                      delete [] pBuf; 
               if (hRequestGet) 
                     InternetCloseHandle(hRequestGet); 
               if (hRequestHead) 
                     InternetCloseHandle(hRequestHead); 
               if (hConnect) 
                     InternetCloseHandle(hConnect); 
               if (hInet) 
        InternetCloseHandle(hInet); 

               return bRet;
     
}