http://dfc.com.ru/ のIInternetProtocolのコードがベース。動けばOKな書き方なのでぐちゃぐちゃです。
- Unit1.pas
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DynamicNS_D3, OleCtrls, SHDocVw, PythonEngine, StdCtrls, PythonGUIInputOutput, XPMan, ExtCtrls; type TForm1 = class(TForm) wb: TWebBrowser; PythonEngine1: TPythonEngine; PythonGUIInputOutput1: TPythonGUIInputOutput; Memo1: TMemo; PythonDelphiVar1: TPythonDelphiVar; Panel1: TPanel; cboUri: TComboBox; go: TButton; XPManifest1: TXPManifest; procedure wbNavigateComplete2(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); procedure goClick(Sender: TObject); procedure PythonDelphiVar1GetData(Sender: TObject; var Data: Variant); procedure PythonDelphiVar1SetData(Sender: TObject; Data: Variant); procedure FormCreate(Sender: TObject); private { Private declarations } procedure OnContent(const url:String; var Stream:TStream); procedure Accept(const URL:String;var Accept:Boolean); public { Public declarations } end; var Form1: TForm1; nav_uri: String; implementation {$R *.dfm} { TForm1 } procedure TForm1.OnContent(const url: String; var Stream: TStream); var sl: TStringList; begin memo1.Clear; sl := TStringList.Create; try sl.LoadFromFile(ExtractFilePath(Application.ExeName)+ 'site.wsgi'); PythonDelphiVar1.Value := StringReplace(url,DynamicProtocol.ProtocolName+'://','',[rfIgnoreCase]); PythonEngine1.ExecStrings(sl); finally sl.Free; end; Stream := TFileStream.Create(ExtractFilePath(Application.ExeName)+ 'tmp', fmOpenRead); end; procedure TForm1.Accept(const URL: String; var Accept: Boolean); begin Accept := True; end; procedure TForm1.FormCreate(Sender: TObject); begin DynamicProtocol.ProtocolName := 'wsgi'; DynamicProtocol.Enabled := True; DynamicProtocol.OnGetContent := OnContent; DynamicProtocol.OnAccept := Accept; wb.Navigate(cboUri.Text); end; procedure TForm1.PythonDelphiVar1SetData(Sender: TObject; Data: Variant); begin nav_uri := Data; end; procedure TForm1.PythonDelphiVar1GetData(Sender: TObject; var Data: Variant); begin Data := nav_uri; end; procedure TForm1.goClick(Sender: TObject); begin wb.Navigate(cboUri.Text); end; procedure TForm1.wbNavigateComplete2(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin if cboUri.Items.IndexOf(URL)<0 then cboUri.Items.Add(URL); cboUri.Text:=URL; end; end.
- site.wsgi
import os, sys os.environ['DJANGO_SETTINGS_MODULE'] = 'tkhp.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() application.load_middleware() from django.http import HttpRequest req = HttpRequest() req.path = nav_uri.Value res = application.get_response(req) import re re_html = re.compile('<html\s.*>') re_chead = re.compile('[^\x0A]*\x0A?[^\x0A]*\x0A?\x0A?') f = open(os.path.join(os.getcwd(),'tmp'),'wb') out = re_html.split(res.content) if len(out) >= 2: f.write('<html>'+out[1]) else: out = re_chead.split(res.__str__(),1)[1] f.write(out) f.close()